在理解 async/await 的過程中,出現了一個困境:是否有必要在其中封裝一個方法Task.Run 同時實現異步行為和後台線程執行?
「非同步」表示可以在開始執行之前將控制權交給呼叫執行緒的方法。這種讓步是透過await 表達式發生的。相反,MSDN(一個經常誤導性的術語)定義的「非同步」是指在單獨執行緒上執行的程式碼。
另外,「awaitable」描述了可以與await 運算子一起使用的類型。常見的可等待物件包括 Task 和 Task
要在保持可等待性的同時在後台執行緒上執行方法,請使用Task.Run:
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
但是,通常不鼓勵這種方法。
要建立可以暫停和屈服控制的非同步方法,請將該方法聲明為非同步,並在指定的屈服點使用await:
private async Task<int> GetWebPageHtmlSizeAsync() { var html = await client.GetAsync("http://www.example.com/"); return html.Length; }
非同步程式碼依賴其await表達式中的awaitables。 Awaitable 可以是其他非同步方法,也可以是傳回可等待的同步方法。
避免在 Task.Run 中不加區別地包裝同步方法。相反,維護同步簽名,將包裝選項留給消費者。
以上是非同步/等待:我應該將我的方法包裝在'Task.Run”中以進行後台線程嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!