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

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

Barbara Streisand
发布: 2025-02-02 12:46:18
原创
276 人浏览过

How to Call Asynchronous Methods from Synchronous Code in C#?

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

异步编程在C#开发中越来越流行。有时,您可能会遇到需要从同步上下文中调用异步方法的情况。虽然这通常通过异步方法实现,但这篇文章探讨了弥合这一差距的各种方法。

方法一:使用Task.WaitAndUnwrapException

如果您的异步方法很简单,并且不需要与其上下文同步,您可以利用Task.WaitAndUnwrapException来检索其结果。此方法会解开异步操作期间可能发生的任何异常。

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

方法二:使用AsyncContext.RunTask

对于需要上下文同步的方法,您可以使用AsyncContext.RunTask来创建一个嵌套上下文。默认情况下,AsyncContext封装当前的同步上下文。但是,它可以应用于任何任意上下文。

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

方法三:使用Task.Run

如果AsyncContext.RunTask不可行,您可以使用Task.Run在单独的线程上启动异步操作。此方法允许异步方法继续执行,而不会阻塞调用线程。

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

注意事项

使用这些方法时,请记住以下几点:

  • 方法一仅适用于不需要上下文同步的方法。
  • 方法二如果异步方法等待UI事件,可能会导致死锁。
  • 方法三要求异步方法在多线程上下文中正确运行。

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

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