async和await用法

要理解async和await的用法,首先要了解Task相关知识,这里不作说明,由于这不是本文的重点。异步

若是你已经对Task很了解,那么如何使用async和await,在此主要总结了如下三点:async

  1. 只有在async方法里面才能使用await操做符;
  2. await操做符是针对Task对象的;
  3. 当方法A调用方法B,方法B方法体内又经过await调用方法C时,若是方法C内部有异步操做,则方法B会等待异步操做执行完,才往下执行;但方法A能够继续往下执行,不用再等待B方法执行完。
      static void Main(string[] args)
            {
                Test();
                Console.WriteLine("Test End!");
                Console.ReadLine();
            }
    
            static async void Test()
            {
                await Test1();
                Console.WriteLine("Test1 End!");
            }
    
    
            static Task Test1()
            {
                Thread.Sleep(1000);
                Console.WriteLine("create task in test1");
    
                return Task.Run(() =>
                {
                    Thread.Sleep(3000);
                    Console.WriteLine("Test1");
                });
            }

    执行结果:spa

  4. 对结果解释是:code

      Main方法调用具备async标示的Test方法,Test方法经过await调用Test1方法,当执行顺序执行到Test1时,遇到里面的异步操做;则Test方法会等待Test1里面的异步操做执行完再往下执行;可是Main方法,不用再等待Test方法执行,能够继续往下执行。对于上面状况,能够不使用async和await也能实现,代码以下:对象

    static void Main(string[] args)
            {
                Test();
                Console.WriteLine("Test End!");
                Console.ReadLine();
            }
    
            static void Test()
            {
                var test1=Test1();
    
                Task.Run(() =>
                {
                    test1.Wait();
                    Console.WriteLine("Test1 End!");
                });
            }
    
            static Task Test1()
            {
                Thread.Sleep(1000);
    
                Console.WriteLine("create task in test1");
    
                return Task.Run(() =>
                {
                    Thread.Sleep(3000);
                    Console.WriteLine("Test1");
                });
            }
相关文章
相关标签/搜索