Async/Await 同步方法中的异步方法和异步方法中的异步方法
1、同步方法中有异步方法
执行顺序是:Await就等待。同步方法中当遇见异步方法中Await将直接跳出异步方法,继续往下执行同步方法的代码,当异步Await处理完后接着CallBack到异步方法中,执行(刚跳出)Await下面的代码
public void DoRun1() { Console.WriteLine("Caller: Before call"); ShowDealyAsync(); Console.WriteLine("Caller: After call"); } public async Task ShowDealyAsync() { sw.Start(); Console.WriteLine(" Before Delay: {0}", sw.ElapsedMilliseconds); await Task.Delay(3000); //执行到await表达式时,立即返回到调用方法,等待5秒后执行后续部分 Console.WriteLine(" After Delay : {0}", sw.ElapsedMilliseconds);//后续部分 }
2. 异步方法中的异步方法
执行顺序是自上而下得顺序,跟同步方法没两样
所以,一定要注意别把异步方法和同步方法弄混淆。
await Task.Delay(TimeSpan.FromSeconds(3)); 这句代码在不同的方法中调用会出现不同的结果。
看下面代码:
DoRun1()方法和Show方法,在同步方法中调用会有不同的结果。
DoRun1()结果: 堵塞三秒
Show方法结果:,然后等待三秒,打印出后两句