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

關於 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段來運行

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