首頁 >後端開發 >C++ >Task.Run 與 Async 關鍵字:何時使用每個關鍵字進行非同步操作?

Task.Run 與 Async 關鍵字:何時使用每個關鍵字進行非同步操作?

DDD
DDD原創
2025-01-05 11:48:39175瀏覽

Task.Run vs. Async Keyword: When to Use Each for Asynchronous Operations?

Do Work 方法中的非同步性:Task.Run 與非同步關鍵字

在非同步程式設計領域,非同步執行與非同步執行之間的區別可等待性可能是微妙的。讓我們深入研究 Task.Run 和 async 關鍵字的細節,並了解它們在創建同步或非同步執行的方法中的作用。

非同步執行:Task.Run

Task.Run 方法可讓您將程式碼的執行委託給後台執行緒。透過建立封裝程式碼的 Task 對象,Task.Run 可讓您非同步執行程式碼,而不會阻塞目前的執行路徑。但是,使用 Task.Run 並不一定會使方法可等待。

可等待性:非同步關鍵字

非同步方法是可以在等待時暫停和恢復的方法表達式。這允許方法將執行點傳回給呼叫線程而不會阻塞。宣告為非同步的方法可以傳回任務或任務。 (對於參數化返回值)。

範例:不使用 Async/Await 執行

// Not async because it does not use await
private Task<int> DoWorkAsync()
{
  return Task.Run(() =>
  {
    return 1 + 2;
  });
}

在此範例中,我們傳回一個 Task;來自 Task.Run 委託。但是,該方法本身並未聲明為非同步,因為它不使用await。

範例:使用Await 進行非同步執行

private async Task<int> GetWebPageHtmlSizeAsync()
{
  var client = new HttpClient();
  var html = await client.GetAsync("http://www.example.com/");
  return html.Length;
}

在此範例中,方法被宣告為非同步並使用await 來暫停HttpClient.GetAsync 操作的執行。此方法將在下載網頁時傳回給呼叫者,然後在結果可用時恢復。

最佳實踐:

  1. 考慮使用 async 關鍵字建立可以暫停和恢復執行的方法。
  2. 使用 Task.Run 在後台非同步執行程式碼線程,但前提是您需要避免阻塞當前執行路徑。
  3. 避免將同步方法完全包裝在 Task.Run 中。同步方法應該有同步簽章。

結論:

Task.Run 透過將程式碼委託給後台執行緒來促進非同步執行。 async 關鍵字支援可等待性,並允許方法暫停和恢復執行,從而提供創建響應迅速且高效的程式碼的靈活性。

以上是Task.Run 與 Async 關鍵字:何時使用每個關鍵字進行非同步操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn