在 .NET 中同步運行異步方法:Task
在 .NET 中使用異步代碼時,可能出於特定原因需要同步執行異步方法。為此,您可以採用多種技術來實現此目的。
AsyncHelpers.RunSync 方法
一種通用的解決方法是使用 AsyncHelpers.RunSync
方法。此方法允許您同步執行異步 Task 方法,無論是否有返回值。要使用此方法:
AsyncHelpers.RunSync(() => GetCustomers());
AsyncHelpers.RunSync(() => GetCustomers());
,其中 GetCustomers()
是您的異步方法。 自定義同步上下文方法
另一種方法涉及使用自定義同步上下文,特別是 ExclusiveSynchronizationContext
。此方法建立一個專用的同步上下文,允許您在其中同步運行異步任務。要實現此目的:
ExclusiveSynchronizationContext
的實例,並使用 SynchronizationContext.SetSynchronizationContext(syncContext);
將其設置為當前同步上下文。 syncContext.Post(async _ => { ... }, null);
將異步任務發佈到同步上下文。 syncContext.BeginMessageLoop();
啟動同步上下文的 message loop。 syncContext.EndMessageLoop();
結束 message loop。 SynchronizationContext.SetSynchronizationContext(oldContext);
將同步上下文重置為其原始值。 注意事項
雖然這些方法提供了解決方法,但需要注意的是,同步執行異步代碼可能會導致性能下降和潛在的死鎖。因此,建議謹慎使用這些技術,並且僅在絕對必要時才使用。
以上是如何在.NET中同步運行異步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!