异步方法的简洁示例

.net framework 4.5中新增加的async await关键字,即异步方法功能,使异步操作的编写特别方便、高效和容易理解。下面给出一个简洁示例:

 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 AsyncTest
 9 {
10     class Program
11     {
12         static int Count = 0;
13         static void Main(string[] args)
14         { 
15             Test();
16         }
17 
18         public static async Task Test()
19         {
20             List<Task<int>> list = new List<Task<int>>();
21             for (int i = 0; i < 10; i++)
22             {
23                 list.Add(Get(i + ":"));
24             }
25             list.Add(Get("dis:"));
26             Console.WriteLine("最后打印的内容,却出现在最前面。");
27             Task.WaitAll(list.ToArray());
28             Console.ReadLine();
29         }
30 
31         public static async Task<int> Get(string s)
32         {
33             await Task.Delay(100); //await 让该任务等待。Thread.Sleep让整个线程等待.
34             Console.WriteLine(s + DateTime.Now.ToString("HH:mm:ss fff"));
35             return Count;
36         } 
37     }
38 }

总结一下:

1)要异步执行的方法,用 async关键字, 调用的方法也需要该关键字。
2)异步方法返回Task<T> , 调用时便开始执行了,但如果不使用await,调用处便会接着向下执行,不等待返回。调用时保存Task<T>类型的返回值(taskResult),以便后面确认方法是否已返回。
3)await taskResult; 等待(确认)方法返回。
4)示例中给出的是多个异步方法保证最后都执行完成的方式,已验证可以正确运行。

 

 

posted @ 2012-10-30 17:00  乁卬杨  阅读(422)  评论(0编辑  收藏  举报