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