首頁 > 後端開發 > C++ > 非同步/等待:我應該將我的方法包裝在'Task.Run”中以進行後台線程嗎?

非同步/等待:我應該將我的方法包裝在'Task.Run”中以進行後台線程嗎?

Patricia Arquette
發布: 2025-01-05 12:31:40
原創
193 人瀏覽過

Async/Await: Should I Wrap My Method in `Task.Run` for Background Threading?

解開 Async/Await:方法包裝器還是後台執行緒?

在理解 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;
}
登入後複製

連結非同步程式碼和Awaitables

非同步程式碼依賴其await表達式中的awaitables。 Awaitable 可以是其他非同步方法,也可以是傳回可等待的同步方法。

在 Task.Run 中包裝方法:不鼓勵的做法

避免在 Task.Run 中不加區別地包裝同步方法。相反,維護同步簽名,將包裝選項留給消費者。

非同步/等待的其他資源

  • [Async/Await 基礎](https://blog.stephencleary .com/2012/02/async-await-fundamentals.html)
  • [MSDN非同步文件](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts /async/)

以上是非同步/等待:我應該將我的方法包裝在'Task.Run”中以進行後台線程嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板