標籤:
傳統的非同步是利用回呼函數來寫的,寫過的人都知道,,那樣寫的結構東一塊西一塊的,很不好找。
所以在這裡整理啦一下asyns和await實現的非同步。。。
asyns和await的非同步不是很好理解。在這裡,我在注釋中,將細細的標明
class Program { // ---------------規範說明----------------------------- //1.用async標識的方法即為非同步方法呼叫,非同步方法呼叫的傳回值只能是void或者Task<object>,---傳回值是void的方法,不能使用await調用。注意你的傳回型別 //2.在其他方法中調用非同步方法呼叫時,可以加await,表示等待這個非同步方法呼叫結束。 非同步關鍵點就在這個await //3.await標籤只能寫在非同步方法呼叫中 //4.await標識並調用的方法中,也必須要有await才行 static void Main(string[] args) { //第一步,寫了一個 “1” Console.WriteLine("1"); Paint(); //第三步----2,寫了一個 “5” Console.WriteLine("5"); Console.ReadLine(); } //此方法是已經標明是非同步方法呼叫 async static void Paint() { //第二步,寫了一個“2” Console.WriteLine("2"); //第三步--1,代碼發現await欄位,整個方法將直接返回, 並在這個await這裡加個標籤,所以第三步輸出的是“5” //等到 RequestBody方法傳回值時,再次進入Paint方法中,並且直接從這個await欄位處運行, //-----------------------------等待一秒---------這時候,已經輸出了“5” //一秒後RequestBody方法傳回值了,RequestBody的傳回型別應該是Task<string>, //但是,用了await之後,傳回值直接就是string //並且,輸出“4”的操作被await阻塞 Console.WriteLine(await RequestBody()); Console.WriteLine("4"); } async static Task<string> RequestBody() { //被await調用的方法中,必須要有await return await Task.Run(() => { Thread.Sleep(2000); return "3"; }); } }
asyns和await實現傳統的非同步---------C#