【发布时间】:2018-08-17 04:29:28
【问题描述】:
我有这三种方法:
Public myConstructor()
{
myMethodAsync02();
string myDummy = "";
}
private async void myMethodAsync02()
{
await myMethodAsync();
}
private async Task myMethodAsync()
{
await Task.Delay(5000);
string myDummy = "";
}
当我单击按钮时,在 myMethod() 完成之前到达带有 myDummy 字符串的行。
我想知道如何等到异步方法在 5 秒后完成。
我知道 myMethodAsync02 应该返回一个任务,但这是我真实案例的简化示例,因为在我的真实案例中 yMethodAsync02 方法是一个事件处理方法,所以它必须返回一个 void 类型。
谢谢。
【问题讨论】:
-
你有异步无效。这是一个非常糟糕的主意。不要这样做,除非它是一个事件处理程序。见Async Await Best Practices。您需要等待您致电
myMethodAsync02。这意味着它需要返回一个任务。 -
@mason 根据史蒂夫的回答,对于事件处理程序是允许的;除此之外:任务和等待
-
MyMethod02 是一个事件处理程序,因此唯一的选项是返回 void。
-
@MarcGravell 是的,我确实包含了免责声明“除非它是事件处理程序”。
-
@mason 显然我今天阅读失败:(
标签: c# async-await