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");
                });
            }
相關文章
相關標籤/搜索