首页 >后端开发 >C++ >如何同步称异步C#方法?

如何同步称异步C#方法?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-02-02 13:01:09464浏览

How Can I Call Asynchronous C# Methods Synchronously?

>同步执行异步C#方法

>通常称为public async Task Foo()>的异步方法对于并发操作和增强的用户体验至关重要。 但是,将它们集成到现有的同步代码库中需要仔细考虑。 让我们检查几种方法。

>

>方法1: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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn