不等待异步方法

时间:2018-08-16 19:12:21

标签: c# async-await

我有这三种方法:

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类型。

谢谢。

2 个答案:

答案 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()