首頁 >後端開發 >C++ >如何在C#中同步運行異步任務?

如何在C#中同步運行異步任務?

DDD
DDD原創
2025-02-01 07:01:09345瀏覽

How Can I Synchronously Run Async Tasks in C#?

使用RunSync輔助方法同步運行異步任務

異步編程(利用async/await)在開發中具有顯著優勢。然而,某些情況下需要同步執行異步任務。本文介紹RunSync輔助方法,它可以同步執行Async Task方法,以此解決此需求。

要使用RunSync,只需將其添加到代碼中,如下所示:

<code class="language-csharp">customerList = AsyncHelpers.RunSync(() => GetCustomers());</code>

實現細節

RunSync方法通過創建一個獨占同步上下文並將其設置為當前上下文來運行。此上下文允許處理消息並確保異步任務的同步執行。為了處理可能出現的任何異常,該方法使用名為ExclusiveSynchronizationContext的私有類,該類擴展了SynchronizationContext。

在此上下文中,任務被發布,並且workItemsWaiting事件被設置為發出信號,指示有項目正在等待。然後,BeginMessageLoop方法處理所有掛起的項目,直到任務完成。完成後,將恢復ExclusiveSynchronizationContext,並返回任務的結果。

其他說明

提供的代碼並非作者所有,仍在審查中。但是,它在各種情況下都證明是有效的,包括掛起調度程序的情況。

結論

通過使用RunSync輔助方法,開發人員可以同步執行異步任務,從而擴展異步編程的功能。 ExclusiveSynchronizationContext和消息循環處理確保以同步方式可靠有效地執行任務。

以上是如何在C#中同步運行異步任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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