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

 

posted @ 2020-03-13 18:15  Index_Zero  阅读(1723)  评论(0编辑  收藏  举报