我有这三种方法:
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类型。
谢谢。
答案 0 :(得分:2)
private async void Button_Click(object sender, RoutedEventArgs e)
{
await myMethodAsync02();
string myDummy = "";
}
private Task myMethodAsync02()
{
return myMethodAsync();
}
只需使您的事件异步并等待它即可。
答案 1 :(得分:1)
由于您的myMethodAsync02();
是async void
且未等待(在这种情况下也不会),因此它立即执行,并且click事件主体的执行直接继续到string myDummy = "";
在您的情况下,您不需要myMethodAsync02();
,只需要await myMethodAsync()
。