2016-09-15 110 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成功運行沒有錯誤或任何異常被捕獲,我還需要停止/在我的申請而取消任務在別的地方?

任務只完成一次。

如果它已經完成(成功或異常),那麼它不能被取消。