揭秘異步和等待:避免Task.Run 難題
一開始理解非同步和等待可能會很棘手,但要分解概念可以簡化流程。
異步與後台線程執行
異步並不本質上意味著“後台線程”;它指的是允許在繼續之前將控制權“讓渡”給呼叫線程的方法。這些讓出點用await表達式標記。
Awaitable 與非同步
Awaitable 類型可以等待(如在await 表達式中),而非同步方法允許非同步執行。並非所有非同步方法都會傳回可等待類型,反之亦然。
Task.Run 進行後台執行
如果您想在後台執行緒上執行操作並使其可等待,使用Task.Run:
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
非同步方法屈服
透過在方法簽章中使用await和async來建立傳回給呼叫者的非同步方法:
private async Task<int> GetWebPageHtmlSizeAsync() { var client = new HttpClient(); var html = await client.GetAsync("http://www.example.com/"); return html.Length; }
避免在同步方法中使用Task.Run
不建議在Task.Run中包裝同步方法。如果需要在後台執行緒上執行,請建立一個單獨的任務。
進一步探索的資源
以上是我什麼時候應該將'Task.Run”與 Async 和 Await 一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!