如何在 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# 中启动一个与非异步函数异步的函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章