使用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中文網其他相關文章!