2016-09-15 76 views
0

我正在使用async/awaitTask以避免wpf UI被阻塞,并使我的应用程序更具响应能力。以下是我在我的应用程序应用async/await停止成功等待任务

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

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

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

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

回答

2

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

  • 没有,你只停止/取消使用CancellationTokenSource,如果绝对必要进行明确的行动(逻辑的一部分),而不是例外/成功运行,他们都将传播给调用者。

在这种情况下,其在-其实可以接受的使用无效,作为一个async button click event,因为UI知道如何处理异常,如果它传播

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

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

将开始Async上的呼叫ThreadPool thread,现在你不能用它来更新任何UI控件,这将导致InvalidOperationException,即需要在UI线程上完成的,这是一个Async呼叫

2

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

2

如果“任务”的0成功运行没有错误或任何异常被捕获,我还需要停止/在我的申请而取消任务在别的地方?

任务只完成一次。

如果它已经完成(成功或异常),那么它不能被取消。