停止成功等待任务

时间:2016-09-15 04:02:13

标签: c# wpf user-interface asynchronous async-await

我使用async/await Task来避免wpf UI被阻止并使我的应用程序更具响应性。以下是我在应用程序中应用async/await的方法:

private async void Button1_Click(object sender, RoutedEventArgs e)
{
      .......

      try
      {
            await Task.Run(() =>
            {
                  ......
            });
      }

      catch (Exception ex)
      {
            ......
      }    
}

如果在Task执行中返回错误,是否需要停止/取消catch?如果'任务'成功运行没有错误或任何异常被捕获,我是否仍需要在我的应用程序中的其他位置停止/取消Task

3 个答案:

答案 0 :(得分:2)

如果您在catch块中,则任务已经停止执行。

答案 1 :(得分:2)

  

如果在catch执行中返回错误,是否需要停止/取消任务?

  • 不,您只使用CancellationTokenSource停止/取消,如果绝对需要作为显式操作(逻辑的一部分),而不是异常/成功运行,它们都将传播回调用者。

在这种情况下,它实际上可以使用void,是async button click event,因为UI知道如何处理异常,如果它传播

但是,请了解您的代码的另一个方面,如下:

await Task.Run(() =>
            {
                  ......
            });

将在Async上启动ThreadPool thread调用,现在您无法使用它来更新任何需要在InvalidOperationException上执行的UI控件。 UI线程,standard synchronization context调用的Async

答案 2 :(得分:2)

  

如果'任务'运行成功没有错误或任何异常被捕获,我还需要在我的应用程序的其他地方停止/取消任务吗?

任务只完成一次。

如果已经完成(成功或有例外),则无法取消。