await void任务(C#)

时间:2018-01-25 17:40:24

标签: c# asynchronous async-await

我需要在等待完成之前运行一个空任务后运行一些有用的代码。

样品:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Task t = SomeAsync();
    MessageBox.Show("before end");
    await t; // <-- how to write this?
    MessageBox.Show("after end");
}

private async Task SomeAsync()
{
    await Task.Run(() =>
    {
        //do some work;
    });
}

我知道如何在任务上写这个,但不能理解async / await。任何人都可以写工作样本。

感谢。

1 个答案:

答案 0 :(得分:7)

只需将处理程序声明为async

即可
private async void Button_Click(object sender, RoutedEventArgs e)
{
    Task t = SomeAsync();
    MessageBox.Show("before end");
    await t; 
    MessageBox.Show("after end");
}

您应该考虑使用await t来围绕try.. catch,因为t中的未处理错误会在应用程序未处理异常时冒出来并关闭您的应用程序。您可以使用TaskScheduler.UnobservedTaskException处理所有未观察到的Task例外情况,但是您应该阅读文档以了解它是否适​​合您的应用。