如何在 C# 中启动一个与非异步函数异步的函数? [复制]

Posted

技术标签:

【中文标题】如何在 C# 中启动一个与非异步函数异步的函数? [复制]【英文标题】:How do I start in C# a function that's async from a function that isn't? [duplicate] 【发布时间】:2019-05-01 08:11:59 【问题描述】:

我有一个不是async 的函数,因此我不能使用await。在那个函数中,我调用了一个函数 async

我的同事建议我使用:

private void Foo()

   var _ = BarAsync();

但是,这种方式的缺点是当函数抛出错误时我不会收到通知。有没有更好的方法来调用函数?我不在乎函数是否异步执行。

【问题讨论】:

你可以使用Wait同步阻止它 -> BarAsync().Wait(); 我正在尝试使用此信息更新 MS 文档。对此投票:github.com/dotnet/docs/issues/7995 @AlexanderDerck :这是否允许我接收在函数中抛出的期望? 【参考方案1】:
var result = BarAsync()?.Result;

或者

var runningTask = BarAsync();
runningTask.Wait();
var result = runningTask?.Result;

【讨论】:

这在一般情况下是一个非常糟糕的主意——甚至会导致硬死锁; 唯一你应该永远访问.Result的时间是如果你已经检查并且你知道它已经完成 @Liam 都可以:)

以上是关于如何在 C# 中启动一个与非异步函数异步的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Node Js:如何在服务器启动时异步执行函数

同步与异步,阻塞与非阻塞

在 C# 中的类构造函数中调用异步方法 [重复]

c#异步通信中回调函数AsyncCallback如何传递参数

C#有异步函数调用同步函数或同步函数调用异步函数

如何在.NET中调用异步函数而不等待它[重复]