【问题标题】:How do I start in C# a function that's async from a function that isn't? [duplicate]如何在 C# 中启动一个与非异步函数异步的函数? [复制]
【发布时间】: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 :这是否允许我接收在函数中抛出的期望?

标签: c#


【解决方案1】:
var result = BarAsync()?.Result;

或者

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

【讨论】:

  • 这在一般情况下是一个非常糟糕的主意——甚至会导致硬死锁; 唯一你应该永远访问.Result的时间是如果你已经检查并且你知道它已经完成
  • @Liam 都可以:)
猜你喜欢
  • 1970-01-01
  • 2020-03-09
  • 2022-11-16
  • 1970-01-01
  • 2020-09-18
  • 2013-07-12
  • 1970-01-01
  • 2021-01-08
  • 2021-11-07
相关资源
最近更新 更多