众所周知(除了不知道的),C#5新增了一个异步等待的功能,用来来很是简单就可以实现异步等待了。规则是这样的:异步
在调用异步方法前面加上await关键字,而且调用该异步方法的方法前面要加上一个async关键字。async
好比这样:线程
async void DoDelayAsync() { await Task.Delay(999999999); }
在进入DoDelayAsync方法时代码同步执行,直到遇到await运算符才会开始异步等待,在等待任务执行完成以前,应用程序不会挂死,这用在用户界面上至关好,当代码在await处等 待异步操做完成的过程当中,用户依然能够操做界面上的其余元素。
之前,要作到这一点,一般须要从另外一个线程进行回调,使用委托来CallBack。现在使用await运算符就变得简单了N倍。
code
是啊,在方法内部用await异步等待,那调用的方法确定要在前面加上async的,可是恰恰这个方法又是Main,你拿他没办法。这下可怎么办呢?get
有朋友确定会说,好办,再定义一个方法,在那方法里面再封装一个带async的方法就好了,就像这样。同步
class Program { static void Main(string[] args) { DoDelayAsync0(); Console.Read(); } async static void DoDelayAsync0() { await Task.Delay(3000); Console.WriteLine("Done, Done"); } }
这样就能运行了,这方法不错。string
既然方法嵌套能够解决,那用委托的结果也是等同的。it
static void Main(string[] args) { Action act = async () => { await Task.Delay(5000); Console.WriteLine("哇哈哈,哈哈哇。"); }; // 调用委托 act(); Console.Read(); }