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