.net中async 和await深入理解

1、await 運算符應用於異步方法中的任務,在方法的執行中插入掛起點,直到所等待的任務完成。
任務表示正在進行的工作。
2、await 可用於由 async 關鍵字修改的異步方法中。
使用 async 修飾符定義並且通常包含一個或多個 await 表達式的這類方法稱爲異步方法。
3、await 真正的目的只有一個 在調用異步方法 XXAsync() 時掛起此方法,它認爲這個方法是比較耗時的方法,主線程或調用此方法的線程不要在此方法等待。
並同時作個標記,當前執行的線程運行結束時,將由此處恢復運行,所以在await 標記的異步方法下面的代碼或方法將不能運行,必須等待這個方法完成!
4、加不加 await 與 方法是異步還是同步的並沒有關係
下面寫個例子講述

 private static async Task XAsync()
  {            
     await  XXAsync();
     OtherMothod();   
  }

5、在運行至 await XXAsync()時,調用方法XAsync()者將不再運行,直接返回,就像我們程序代碼中的return語句。這樣做的好處是,調用線程,不將等待此耗時線程。直接讓調用線程往下運行,
6、如果調用線程向上一直存在await 鏈,就像方法套方法裏有return一樣,會逐層向上返回,一直返回到主線程,而每個“子線程”去等待耗時的I/O處理,比如 操作數據庫和網絡流
7、我們即要多線程或多任務執行我們的程序,讓耗時的任務得到執行,同時又要給調用者快速響應,不管他有沒有完成任務! 這纔是真正的目的。

private static async TaskXAsync()
  {
           
    await  XXAsync();

    await  XXXAsync(); 
  }

XXXAsync()必須等待XXAsync()方法執行結束!此時不會影響調用者的響應速度,但會影響我們代碼的執行效率,這點和兩個同步方法稍有區別

private static async TaskXAsync()
  {
           
    XX();

    XXX(); 
  }

像上面的例子XX()和XXX()兩同步方法,不僅按順序執行,而且調用者也無法拿回調用權,也就是無法及時響應,必須待兩個方法都結束爲止。
筆記:關於異步編程
使用異步編程,方法調用時在後臺運行(通常在線程活任務的幫助下),並且不會阻塞調用線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章