C#任务完成回调异常

时间:2018-10-29 17:38:31

标签: c# winforms async-await

我有一个WindowsForms应用程序,希望能够利用异步Task。我遇到了几个问题:

您如何处理ContinueWith,以便可以在表单中运行延续?

如果可以在任务完成之前关闭表格怎么办?

private void buttonGo_Click(object sender, EventArgs e)
{
    val t = RunSomethingAsync().ContinueWith( p => { OnRunDone(); });
}

private void OnRunDone()
{
    Invoke( p => { button.Enabled = true; });
}
  1. 以上代码是否正确?
  2. 如果在任务完成之前关闭表单,上面的代码会发生什么?
  3. 如果RunSomethingAsync引发未捕获的异常怎么办?

1 个答案:

答案 0 :(得分:0)

我想我明白了。我只是不太了解等待/异步的工作方式。解决方案是:

private async void buttonGo_Click(object sender, EventArgs e)
{
    await RunSomethingAsync();
    OnTaskComplete();
}

private void OnTaskComplete()
{
    label1.Text = "Done";
}

private async Task RunSomethingAsync()
{
     await Task.Delay(1000);
}