首頁 > 後端開發 > C++ > C# 中的「await」關鍵字後執行緒執行會發生什麼事?

C# 中的「await」關鍵字後執行緒執行會發生什麼事?

DDD
發布: 2024-12-29 21:54:10
原創
909 人瀏覽過

What Happens to Thread Execution After an `await` Keyword in C#?

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

考慮以下程式碼範例:

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

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

在此範例中,當使用await關鍵字時在MyAsyncMethod() 中遇到,控制權回傳到MyMethod()。然而,由於task.Wait(),因此線程並沒有被鎖定。相反,延續(await 之後的程式碼)在不同的執行緒上執行。

await 運算子利用同步上下文,它決定應如何執行延續。預設情況下,如果呼叫者在 UI 執行緒上執行,則 continuación 也會在 UI 執行緒上執行。這允許與 UI 操作無縫整合。

但是,如果呼叫者在執行緒池執行緒上執行,則延續可能會在不同的執行緒池執行緒上執行。這是因為執行緒池執行緒並非專用於特定任務,而是可以同時用於多個操作。

要注意的是,可以使用ConfigureAwait 方法來修改await 運算子的行為。此方法可讓您指定延續是否應在同一執行緒或不同執行緒上執行。

例如,如果您不希望延續在同一執行緒上運行,而是在執行緒池執行緒上運行:

await task.ConfigureAwait(false);
登入後複製

透過了解同步上下文的工作原理,您可以有效管理非同步程式碼中的執行緒執行並防止潛在的鎖定問題。

以上是C# 中的「await」關鍵字後執行緒執行會發生什麼事?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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