.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)示例中给出的是多个异步方法保证最后都执行完成的方式,已验证可以正确运行。