• C# Async/Await 异步操作


    异步编程的核心是使用多线程,通过让不同的线程执行不同的任务,从而实现异步编程。

    Demo:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading;
     6 using System.Threading.Tasks;
     7 
     8 namespace DemoAsync
     9 {
    10     class Program
    11     {
    12         static void Main(string[] args)
    13         {
    14             Console.WriteLine("Task Start !");
    15             //DotaskWithThread();
    16             DOTaskWithAsync();
    17             Console.WriteLine("Task End !");
    18             Console.ReadLine();
    19 
    20         }
    21 
    22         public static async void DOTaskWithAsync()
    23         { 
    24             Console.WriteLine("Await Taskfunction Start");
    25             await Task.Run(()=> {
    26                 Dotaskfunction();
    27                 }); 
    28         }
    29         public static void Dotaskfunction()
    30             {
    31             for (int i = 0; i <= 5; i++) {
    32 
    33                 Console.WriteLine("task {0}  has been done!",i);
    34             } 
    35             } 
    36 
    37     }
    38 }
    View Code

    应用实例:

    public static void InterfaceTest() //OperationResult InterfaceTest()
    {
    OperationResult returnResult = new OperationResult();
    var request = new Request(); 
    string user = "{ "UserName":"admin","Password":"admin"}";
    string url = "http://127.0.0.1:8010/api/admin/auth/login";
    var r = Multek.Net.Request.Send(url, HttpMethod.POST, user);
    if (r.Success)
    {
    dynamic obj = r.Data.ToString().ToDynamicObject();
    if (obj.msg == "success")
    {
    var objd = obj.data as dynamic;
    string accToken = objd.accessToken;
    string url2 = "http://127.0.0.1:8010/api/cu_int_equipment";
    Dictionary<string, string> headers = new Dictionary<string, string>();
    //headers.Add("Authorization", "1e90618fc-2e3db-4f36-983a-6c7258b720e5");
    headers.Add("Authorization","Bearer " + accToken);
    BaseManager bm = new BaseManager();
    DataTable dt = bm.FillTable("SELECT * FROM [dbo].[t_EquipMaster] "); 
    var data = JsonConvert.SerializeObject(dt);

    var data = new[] { new { equipment = EquipID, equipmentType = "", status = BDorPM, remark = "" }, };
    var datajson = JsonConvert.SerializeObject(data);


    DOTaskWithAsync(data);   //异步调用另外一个操作
    returnResult = Request.Send(url2, HttpMethod.POST, data, headers, "application/json");
    }
    }
    //return returnResult;
    }

    public static async void DOTaskWithAsync(object data)
    {
    Console.WriteLine("Await Taskfunction Start");
    await Task.Run(() => {
    InterfacePortal.EventDistributorAPI eda = new InterfacePortal.EventDistributorAPI();
    var res = eda.FireEvent<dynamic>("Equipment", data);
    });
    }

      1  /// <summary>
      2         /// 使用GET方式发送一个HTTP请求并返回其响应
      3         /// </summary>
      4         /// <param name="url">请求路径</param>
      5         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
      6         public static OperationResult Send(string url)
      7         {
      8             return Send(url, HttpMethod.GET, new JsonParameters(), null,"");
      9         }
     10 
     11         /// <summary>
     12         /// 使用GET方式发送一个HTTP请求并返回其响应
     13         /// </summary>
     14         /// <param name="url">请求路径</param>
     15         /// <param name="parameters">参数</param>
     16         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
     17         public static OperationResult Send(string url, JsonParameters parameters)
     18         {
     19             return Send(url, HttpMethod.GET, parameters, null,"");
     20         }
     21 
     22         /// <summary>
     23         /// 使用指定的方式发送一个请求
     24         /// </summary>
     25         /// <param name="url">请求路径</param>
     26         /// <param name="method">请求方式</param>
     27         /// <param name="parameters">参数</param>
     28         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
     29         public static OperationResult Send(string url,HttpMethod method, JsonParameters parameters)
     30         {
     31             return Send(url, method, parameters, null, "");
     32         }
     33 
     34         /// <summary>
     35         /// 使用指定的方式发送一个请求
     36         /// </summary>
     37         /// <param name="url">请求路径</param>
     38         /// <param name="method">请求方式</param>
     39         /// <param name="parameters">参数</param>
     40         /// <param name="headers">请求头设置</param>
     41         /// <param name="contentType">参数内容类型</param>
     42         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
     43         public static OperationResult Send(string url, HttpMethod method, JsonParameters parameters, Dictionary<string, string> headers, ContentType contentType)
     44         {
     45             return Send(url, method, parameters, headers, GetContentType(contentType));
     46         }
     47 
     48         /// <summary>
     49         /// 使用指定的方式发送一个请求
     50         /// </summary>
     51         /// <param name="url">请求路径</param>
     52         /// <param name="method">请求方式</param>
     53         /// <param name="jsonparameter">JSON格式的参数</param>
     54         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
     55         public static OperationResult Send(string url, HttpMethod method, string jsonparameter)
     56         {
     57             return Send(url, method, jsonparameter, null, GetContentType(ContentType.JSON));
     58         }
     59 
     60         /// <summary>
     61         /// 使用指定的方式发送一个请求
     62         /// </summary>
     63         /// <param name="url">请求路径</param>
     64         /// <param name="method">请求方式</param>
     65         /// <param name="headers">请求头设置</param>
     66         /// <param name="jsonparameter">JSON格式的参数</param>
     67         /// <returns></returns>
     68         public static OperationResult Send(string url, HttpMethod method,Dictionary<string,string> headers, string jsonparameter)
     69         {
     70             return Send(url, method, jsonparameter,headers, GetContentType(ContentType.JSON));
     71         }
     72 
     73         /// <summary>
     74         /// 使用指定的方式发送一个请求
     75         /// </summary>
     76         /// <param name="url">请求路径</param>
     77         /// <param name="method">请求方式</param>
     78         /// <param name="jsonparameter">JSON格式的参数</param>
     79         /// <param name="headers">请求头设置</param>
     80         /// <param name="contentType">参数内容类型</param>
     81         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
     82         public static OperationResult Send(string url, HttpMethod method, string jsonparameter, Dictionary<string, string> headers, string contentType)
     83         {
     84             OperationResult result = new OperationResult();
     85             var httpStatus = HttpStatusCode.ServiceUnavailable;
     86             Encoding Charset = Encoding.UTF8;
     87             string responseContext = "";
     88             HttpWebResponse response = null;
     89             try
     90             {
     91                 var requesturl = method != HttpMethod.POST && jsonparameter.Length>0? url + "?json=" +jsonparameter : url;
     92                 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
     93                 var request = (HttpWebRequest)WebRequest.Create(requesturl);
     94                 request.Method = method.ToString();
     95                 request.ContentType = contentType;
     96                 request.PreAuthenticate = true;
     97                 request.UseDefaultCredentials = true;
     98                 if (headers != null)
     99                 {
    100                     foreach (var h in headers.Keys)
    101                     {
    102                         request.Headers.Add(h, headers[h]);
    103                     }
    104                 }
    105                 if (method == HttpMethod.POST)
    106                 {
    107                     Byte[] body = Charset.GetBytes(jsonparameter);
    108                     request.ContentLength = body.Length;
    109                     using (Stream os = request.GetRequestStream())
    110                     {
    111                         os.Write(body, 0, body.Length);
    112                     }
    113                 }
    114                 else request.ContentLength = 0;
    115                 response = (HttpWebResponse)request.GetResponse();
    116                 httpStatus = response.StatusCode;
    117                 using (Stream stream = response.GetResponseStream())
    118                 {
    119                     StreamReader sr = new StreamReader(stream, Charset);
    120                     responseContext = sr.ReadToEnd().Trim();
    121                     result.Data = responseContext;
    122                 }
    123                 response.Close();
    124             }
    125             catch (WebException we)
    126             {
    127                 HttpWebResponse httpResp = (HttpWebResponse)we.Response;
    128                 result.Errors.Add("内部错误:" + httpStatus + ",message:" + we.Message);
    129             }
    130             return result;
    131         }
    132         
    133         /// <summary>
    134         /// 发送一个HTTP请求并返回其响应
    135         /// </summary>
    136         /// <param name="url">请求路径</param>
    137         /// <param name="method">请求方式</param>
    138         /// <param name="parameters">参数</param>
    139         /// <param name="headers">请求头设置</param>
    140         /// <returns>如果请求成功,请求结果通过OperationResult.Data返回(注意检查调用目标的返回结果)。</returns>
    141         public static OperationResult Send(string url, HttpMethod method, JsonParameters parameters, Dictionary<string, string> headers,string contentType)
    142         {
    143             OperationResult result = new OperationResult();
    144             if (parameters == null)
    145                 parameters = new JsonParameters();
    146             var httpStatus = HttpStatusCode.ServiceUnavailable;
    147             Encoding Charset = Encoding.UTF8;
    148             string responseContext = "";
    149             HttpWebResponse response = null;
    150             try
    151             {
    152                 var requesturl = method != HttpMethod.POST && parameters.Count>0 ? url +"?"+ parameters.ToString() : url;
    153                 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
    154                 var request = (HttpWebRequest)WebRequest.Create(requesturl);
    155                 request.Method = method.ToString();
    156                 request.ContentType = contentType;
    157                 request.PreAuthenticate = true;
    158                 request.UseDefaultCredentials = true;
    159                 if (headers != null)
    160                 {
    161                     foreach (var h in headers.Keys)
    162                     {
    163                         request.Headers.Add(h, headers[h]);
    164                     }
    165                 }
    166                 if (method == HttpMethod.POST && parameters.Count > 0)
    167                 {
    168                     Byte[] body = Charset.GetBytes(parameters.ToJsonString());
    169                     request.ContentLength = body.Length;
    170                     using (Stream os = request.GetRequestStream())
    171                     {
    172                         os.Write(body, 0, body.Length);
    173                     }
    174                 }
    175                 else request.ContentLength = 0;
    176                 response = (HttpWebResponse)request.GetResponse();
    177                 httpStatus = response.StatusCode;
    178                 using (Stream stream = response.GetResponseStream())
    179                 {
    180                     StreamReader sr = new StreamReader(stream, Charset);
    181                     responseContext = sr.ReadToEnd().Trim();
    182                     result.Data = responseContext;
    183                 }
    184                 response.Close();
    185             }
    186             catch (WebException we)
    187             {
    188                 HttpWebResponse httpResp = (HttpWebResponse)we.Response;
    189                 result.Errors.Add("内部错误:" + httpStatus + ",message:" + we.Message);
    190             }
    191             return result;
    192         }
    View Code
  • 相关阅读:
    spring bean的三种管理方式·
    mybatis解决字段名和实体属性不相同
    python字符串格式化方法%s和format函数
    myeclipse配置springmvc教程
    2019ICPC南昌站
    浅谈可持久化线段树(主席树)
    2019CCPC厦门站总结
    牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)
    2019牛客暑期多校训练营(第一场)A
    [The Preliminary Contest for ICPC Asia Nanjing 2019] L-Digit sum
  • 原文地址:https://www.cnblogs.com/Depingblogs/p/13829942.html
Copyright © 2020-2023  润新知