首頁 >後端開發 >C++ >Await Task.Run(() => ...) 與 Await LongProcess():什麼時候應該使用它們?

Await Task.Run(() => ...) 與 Await LongProcess():什麼時候應該使用它們?

Barbara Streisand
Barbara Streisand原創
2025-01-22 18:26:09847瀏覽

Await Task.Run(() => ...) 與 Await LongProcess():何時該使用它們?
” /></p>
<h2>Async/Await 和 Task.Run:詳細比較</h2>
<p>非同步程式設計經常涉及<code>await</code>和<code>Task.Run</code>,導致潛在的混亂。  本文透過一個具體的例子來闡明它們的差異。 </p>
<h3>範例</h3>
<p>讓我們來分析一下這些程式碼片段:</p>
<pre class=<code class=" language-csharp>await Task.Run(() => LongProcess()); </p> <pre class="brush:php;toolbar:false"><code class="language-csharp">await LongProcess();</code>

LongProcess 是使用 await ExecuteReaderAsync().

執行多個資料庫呼叫的非同步方法

異步等待基礎知識

需要澄清的是,async/await 本身並不會建立多個執行緒。 一個線程處理所有事情。

Async/await 允許執行緒在等待非同步操作時執行其他任務。 想像一下,一位廚師在切蔬菜和檢查烤箱之間同時處理多項任務;線程類似地在任務之間切換,直到遇到 await,然後恢復執行。

利用 Task.Run

Task.Run 在啟動非同步操作而不立即等待其完成時很有價值。在非同步操作運行時保持對使用者輸入或其他任務的執行緒回應能力時,這是有利的。

情景分析

在此範例中,兩種方法都會產生相同的結果。 await Task.Run(...) 在由 Task.Run 管理的單獨執行緒上執行非同步操作。然而,當前線程仍然等待完成,這使得它在功能上等同於直接等待 LongProcess.

總結

掌握 async/await 的細微差別對於高效的非同步程式設計至關重要。 在這種特定情況下,await Task.Run(...)await 都達到相同的結果。 最佳選擇取決於是否有必要在非同步操作期間保持當前執行緒的回應能力。

以上是Await Task.Run(() => ...) 與 Await LongProcess():什麼時候應該使用它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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