首頁 > 後端開發 > C++ > 在多執行緒應用程式中,什麼執行緒在「await」關鍵字之後執行程式碼?

在多執行緒應用程式中,什麼執行緒在「await」關鍵字之後執行程式碼?

Linda Hamilton
發布: 2024-12-30 22:48:10
原創
770 人瀏覽過

What Thread Executes Code After an `await` Keyword in a Multi-Threaded Application?

揭開「Await」後執行緒執行的神秘面紗

在多執行緒應用程式中,理解執行流程至關重要。當遇到神秘的「await」關鍵字時,開發人員經常會遇到這樣的問題:「哪個執行緒在「await」之後協調程式碼的恢復?」

考慮以下程式碼片段:

private void MyMethod()
{
    Task task = MyAsyncMethod();
    task.Wait();
}

private async Task MyAsyncMethod()
{
    //Code before await
    await MyOtherAsyncMethod();
    //Code after await
}
登入後複製

假設這段程式碼在單執行緒應用程式中運行,它會變得令人困惑:如果執行緒是,'await'關鍵字後面的程式碼如何執行被「task.Wait()」鎖定?

答案在於「await」關鍵字的複雜行為。它將控制權交還給呼叫者,允許其他非同步操作繼續進行。 「等待」任務的延續(「等待」之後的程式碼)被安排在符合目前同步上下文的執行緒上執行。

在這種情況下,如果「MyMethod()」函數在 UI 執行緒上執行,「await」之後的程式碼也會在 UI 執行緒上執行一次「MyOtherAsyncMethod()」完成。

但是,需要注意的是,不能保證用於延續的確切執行緒。在多執行緒應用程式中,延續可以在執行緒池中的任何可用執行緒上執行。但是,同步上下文確保“await”之後的程式碼以與原始執行緒一致的方式執行。

在給定的範例中,透過呼叫“task.Wait()”,主執行緒執行緒將無限期地被阻塞,從而阻止繼續執行。為了避免這種情況,應該正確等待非同步操作而不阻塞主執行緒。

以上是在多執行緒應用程式中,什麼執行緒在「await」關鍵字之後執行程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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