.Net 4.5 的async 和await 的简单理解使用

原文地址:http://www.cnblogs.com/HJL-Blog/p/4432632.html

所谓的异步编程是利用CPU空闲时间和多核的特性,它所返回的Task或Task<TResult>是对await的一个承诺,当任务执行完毕后返回一个结果给接收者

  • 方法签名包含一个 Async 或 async 修饰符。

  • 按照约定,异步方法的名称以“Async”后缀结尾。

  • 返回类型为下列类型之一:

    • 如果你的方法有操作数为 TResult 类型的返回语句,则为 Task<TResult>

    • 如果你的方法没有返回语句或具有没有操作数的返回语句,则为 Task

    • 如果你编写的是异步事件处理程序,则为 Void(Visual Basic 中为 Sub)。

    有关详细信息,请参见本主题后面的“返回类型和参数”。

  • 方法通常包含至少一个 await 表达式,该表达式标记一个点,在该点上,直到等待的异步操作完成方法才能继续。 同时,将方法挂起,并且控件返回到方法的调用方。(这里所谓的挂起就是上文所提到的承诺,异步方法承诺会给调用方一个结果)

 

 1         static void Main(string[] args)
 2         {
 3             Console.WriteLine("主方法开始");
 4             ExeAsync();
 5             Console.WriteLine("主方法结束");
 6 
 7             Console.ReadKey();
 8         }
 9         /// <summary>
10         /// 需要去执行耗时的异步方法
11         /// </summary>
12         static async void ExeAsync()
13         {
14             Console.WriteLine("异步开始...");
15             //等待异步方法执行完后,才继续执行下一步,
16             //但是这里会返回给调用者继续执行主线程方法
17             int res = await GoAsync();
18             Console.WriteLine("异步结束...res: " + res);
19         }
20         /// <summary>
21         /// 异步耗时方法
22         /// </summary>
23         /// <returns></returns>
24         static async Task<int> GoAsync()
25         {
26             for (int i = 0; i < 2; i++)
27             {
28                 //模拟耗时操作
29                 HttpClient client = new HttpClient();
30                 Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
31                 Console.WriteLine(DateTime.Now.Millisecond + " 异步 " + (await getStringTask).Length);
32             }
33             return 100;
34         }

 

posted @ 2016-05-24 14:07  Young汨  阅读(463)  评论(0编辑  收藏  举报