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方法結果:,然后等待三秒,打印出后兩句