程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> async和await淺析,asyncawait淺析

async和await淺析,asyncawait淺析

編輯:C#入門知識

async和await淺析,asyncawait淺析


要理解async和await的用法,首先要了解Task相關知識,這裡不做說明,因為這不是本文的重點。

如果你已經對Task很了解,那麼如何使用async和await,在此主要總結了以下三點:


 

對於第三點說的有點繞,所以下面結合代碼說一下:

復制代碼
        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");
            });
        }
復制代碼

 

執行結果:

 

對結果解釋是:

  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");
            });
        }
復制代碼

 

 


 

最後:這是我個人的理解和總結,歡迎大家來討論或指教

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved