原文地址: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 }
时间: 2024-10-09 17:42:28