>通常称为public async Task Foo()
>的异步方法对于并发操作和增强的用户体验至关重要。 但是,将它们集成到现有的同步代码库中需要仔细考虑。 让我们检查几种方法。
Task.WaitAndUnwrapException
)的直接异步方法,
ConfigureAwait(false)
Task.WaitAndUnwrapException
这个整洁的处理异常,而没有额外的
<code class="language-csharp">var task = MyAsyncMethod(); var result = task.WaitAndUnwrapException();</code>需要上下文同步,则此方法是不合适的。
>
AggregateException
方法2:MyAsyncMethod
AsyncContext.RunTask
>的任务的僵局。
AsyncContext.RunTask
>方法3:
<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>
>如果ConfigureAwait(false)
不适合(例如,当异步方法等待UI事件时),请将异步方法从线程池中卸载:
Task.Run
是线程安全,并且不依赖于UI元素或ASP.NET请求上下文。 另外,使用方法1使用>
AsyncContext.RunTask
进一步阅读
<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod()); var result = task.WaitAndUnwrapException();</code>要深入了解,请咨询Stephen Cleary的《 2015年MSDN》文章“异步编程-Brownfield Async Development”。
以上是如何同步称异步C#方法?的详细内容。更多信息请关注PHP中文网其他相关文章!