要理解async和await的用法,首先要了解Task相關知識,這裏不作說明,由於這不是本文的重點。異步
若是你已經對Task很瞭解,那麼如何使用async和await,在此主要總結了如下三點:async
對於第三點說的有點繞,因此下面結合代碼說一下:spa
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"); }); }
執行結果:code
對結果解釋是:對象
Main方法調用具備async標示的Test方法,Test方法經過await調用Test1方法,當執行順序執行到Test1時,遇到裏面的異步操做;則Test方法會等待Test1裏面的異步操做執行完再往下執行;可是Main方法,不用再等待Test方法執行,能夠繼續往下執行。blog
對於上面狀況,能夠不使用async和await也能實現,代碼以下:string
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"); }); }
最後:這是我我的的理解和總結,歡迎你們來討論或指教it