首頁 >後端開發 >C++ >我什麼時候應該將'Task.Run”與 Async 和 Await 一起使用?

我什麼時候應該將'Task.Run”與 Async 和 Await 一起使用?

Barbara Streisand
Barbara Streisand原創
2025-01-04 12:01:35364瀏覽

When Should I Use `Task.Run` with Async and Await?

揭秘異步和等待:避免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中包裝同步方法。如果需要在後台執行緒上執行,請建立一個單獨的任務。

進一步探索的資源

  • [M. Thaddeus Payne 的Async/Await 簡介部落格](https://blog.m-thaddeus.com/ async- and-await-simplified-an-簡介/)
  • [非同步程式設計的MSDN文件](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)

以上是我什麼時候應該將'Task.Run”與 Async 和 Await 一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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