zoukankan      html  css  js  c++  java
  • C# async/await使用举例

    1、async/await几点总结

      a、被async标记的方法,返回值类型只能为voidTaskTask<T>。

      b、被async标记的方法,内部可以有await修饰符,表明内部逻辑某处有异步执行方法。

      c、被async标记的方法,内部可以没有await修饰符,所有逻辑将同步执行。

      d、task任务执行创建的线程为后台线程,主线如果不Task.result获取结果,主线程结束,异步任务未完成也结束。

      f、await关键字:方法要被async修饰,才能在方法内部使用await,await后面必须是一个task或返回task的方法,标记了await,就说明后面的操作是一个异步操作。

    2、应用实例

     1   static void Main(string[] args)
     2         {
     3             Console.WriteLine("主线程开始");
     4             Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
     5             var task = GetLengthAsync();
     6             Console.WriteLine("主线程继续");
     7             var timer = new Stopwatch();
     8             timer.Start(); 
     9             Console.WriteLine("task的返回值是" + task.Result);
    10             timer.Stop();
    11             Console.WriteLine("耗时:" + timer.Elapsed.TotalSeconds + ""); //显示时间
    12             Console.WriteLine("主线程ID:" + Thread.CurrentThread.ManagedThreadId);
    13             Console.WriteLine("主线程结束");
    14         }
    15 
    16         private static async Task<int> GetLengthAsync()
    17         {
    18             Console.WriteLine("GetLengthAsync()开始");
    19             Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
    20             var str = await GetStringAsync();
    21             Console.WriteLine("GetLengthAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
    22             Console.WriteLine("GetLengthAsync()执行完毕");
    23             return str.Length;
    24             
    25         }
    26 
    27         private static Task<string> GetStringAsync()
    28         {
    29             Console.WriteLine("GetStringAsync()开始");
    30             Console.WriteLine("GetStringAsync()线程ID:" + Thread.CurrentThread.ManagedThreadId);
    31             Console.WriteLine("GetStringAsync()结束");
    32             return Task.Run(() =>
    33             {
    34                 Task.Delay(5000);
    35                 Console.WriteLine("异步任务开始执行");
    36                 Console.WriteLine("异步任务开始执行线程ID:" + Thread.CurrentThread.ManagedThreadId);
    37                 Console.WriteLine("异步任务耗时10s:");
    38                 Thread.Sleep(10000);
    39                 Console.WriteLine("异步任务执行完毕");
    40                 return "异步任务执行结果";
    41             });
    42             
    43         }

    运行结果显示。

    注释调9行结果显示。表明,主线程结束,异步任务未完成也结束。

    部分内容参考:https://www.cnblogs.com/sheng-jie/p/6471986.html

  • 相关阅读:
    MVP on dot NET Episode 1
    以服务器端为中心的 ASP.NET AJAX 模式 (Part 2 Control)
    以服务器端为中心的 ASP.NET AJAX 模式 (Part 1 Behavior)
    编写 iPhone Friendly 的 Web 应用程序 (Part 6 iUI)
    Vista 为什么要引入 UAC
    Windows 就是一个带 UI 的命令行
    ASP.NET AJAX 4.0 Preview 3 (Part 2 ASP.NET AJAX Template)
    如何订阅MVP on dot NET(或其它播客) iTunes版
    深入理解 ASP.NET 动态控件 (Part 5 编译实验)
    使用 .NET 实现 Ajax 长连接 (Part 2 Mutex Wait & Signal)
  • 原文地址:https://www.cnblogs.com/mojiejushi/p/13200748.html
Copyright © 2011-2022 走看看