首頁 > 後端開發 > C++ > 單線程應用程式中的'await”後如何恢復程式碼執行?

單線程應用程式中的'await”後如何恢復程式碼執行?

Susan Sarandon
發布: 2025-01-01 08:15:11
原創
987 人瀏覽過

How Does Code Execution Resume After `await` in a Single-Threaded Application?

理解'await' 關鍵字之後的執行緒執行

問題:

在單執行緒控制台應用程式中,如何因為執行緒被task.Wait()鎖定,await關鍵字之後的程式碼可以執行嗎?是否有新線程接管,或者主線程以某種方式離開task.Wait()來運行後續程式碼?

答案:

執行機制:

當像MyAsyncMethod()這樣的非同步方法中遇到awaawait時,剩餘的方法中的程式碼被視為延續。 wait 關鍵字有效暫停方法的執行,直到暫停的任務(例如 MyOtherAsyncMethod())完成。

執行緒延續:

預設情況下,延續非同步方法與await 關鍵字之前的程式碼在相同的同步上下文上運行。對於 UI 應用程序,這意味著等待之後的程式碼將在主 UI 執行緒上執行。

單執行緒應用程式中的場景:

中但是,在單執行緒控制台應用程式中,呼叫task.Wait() 會阻止主執行緒的執行。因此,await 之後的延續程式碼無法執行,因為執行緒被有效鎖定。

解決方案:

要允許延續程式碼在單執行緒應用程式中運行,您有兩個選擇:

  • 使用SynchronizationContext.Post():此方法可讓您將延續委託發佈到目前同步上下文,該委託將在被封鎖的執行緒可用時執行。
  • 使用 Task.ConfigureAwait(false ): 此方法明確表示延續程式碼不需要在同一執行緒上執行。它允許繼續在任何可用的線程池線程上運行,即使阻塞線程很忙。

以上是單線程應用程式中的'await”後如何恢復程式碼執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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