首页 > 后端开发 > C++ > 如何从C#中的同步方法调用异步方法?

如何从C#中的同步方法调用异步方法?

Susan Sarandon
发布: 2025-02-02 12:41:13
原创
990 人浏览过

How Can I Call Asynchronous Methods from Synchronous Methods in C#?

在C#中同步方法调用异步方法

在同步代码中调用异步方法(通常用async修饰符标识)是一个常见的开发难题。异步编程能够在保持UI响应性的同时执行长时间运行的操作,但这通常需要调整代码结构,而这可能与现有的同步方法不符。

方案一:Task.WaitAndUnwrapException

如果异步方法(MyAsyncMethod)可以独立运行,无需上下文同步,则可以使用Task.WaitAndUnwrapException提供一个简单的解决方案:

var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();
登录后复制

但是,使用Task.Wait或Task.Result时需要注意,它们会将异常包装在AggregateException中。

方案二:AsyncContext.RunTask

或者,如果MyAsyncMethod需要上下文同步,AsyncContext.RunTask提供了一种嵌套上下文的方法:

var result = AsyncContext.RunTask(MyAsyncMethod).Result;
登录后复制

方案三:Task.Run

在某些情况下,AsyncContext.RunTask可能会受到限制,例如依赖于UI事件的异步方法。在这种情况下,可以在线程池上执行异步方法:

var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();
登录后复制

请注意,此方法要求MyAsyncMethod能够在线程池上下文中兼容,包括对UI元素更新和ASP.NET请求上下文访问的限制。

以上是如何从C#中的同步方法调用异步方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板