async & await


關於 4.5中新增的異步編程新特性總結

1.用async標記的異步方應該使用await關鍵子來制定掛起點。await操作符會告訴編譯器,這個async方法在完成之前,后面的代碼無法繼續執行,同時,控制權轉移到async方法的調用者

2.一個async方法里通常包含一個或多個的對應的await操作符,但如果沒有await表達式也不會導致編譯錯誤。但如果調用一個async方 法,卻不使用await關鍵字來標記一個掛起點的話,程序將會忽略async關鍵字並以同步的方式執行

3.如果指定Task<TResult>為返回結果,那么這個方法必須包含return指定的TResult結果的語句。

如果使用Task作為返回值,那么這個方法應該不存在使用return語句返回結果的代碼,或者返回的結果不參與任何運算(包括賦值操作)

4.async和await關鍵字並不會創建額外的線程,async方法不會去請求多線程操作。真正創建線程的操作是由Task.Run()實現的

5.在一個async方法的內部 當調用異步請求(httpClient.SendAsync)之后開始處理主線程的其他任務,最后在需要異步操作返回結果的地方Awaite等待異步操作的完成 期間 httpClient.SendAsync任務和主線程中的任務是並行運行的(所以可以充分利用Cpu的資源)有兩種情況會發生A.在調用Awaite時SendAsync的異步任務已經完成了這個時候await responseMsgTask是在主線程中的,B在awaite時SendAsync的異步任務還未完成這個時候主線程的任務會被阻塞 直到異步任務完成后重新激活主線程的后續任務 這個時候await responseMsgTask是在異步線程中的

6.Await后的代碼也可以放在Task中ContinueWith段來運行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM