2016-09-15 3 views
0

私はasync/awaitTaskを使用しています.WPFのUIがブロックされていないようにして、アプリケーションのレスポンスを向上させてください。ここでは、私は自分のアプリケーションでasync/awaitを適用する方法は次のとおりです。それはcatch実行中にエラーを返した場合タスクが正常に終了するのをやめてください

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

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

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

は、私がキャンセル/ Taskを停止する必要がありますか? 「タスク」がエラーなしで正常に実行された場合や例外がキャッチされた場合は、アプリケーション内の他の場所でTaskを停止/キャンセルする必要がありますか?

答えて

2

キャッチ実行でエラーが返された場合、タスクを停止またはキャンセルする必要がありますか?

  • いいえ、あなただけそれらの両方が呼び出し元に伝播する、絶対に明示的なアクション(ロジックの一部)として、必要であれば、ない例外/正常に実行するために、CancellationTokenSourceを使用してキャンセル/停止します。この場合

UIが例外を処理する方法を知っているので、それは

を伝播する場合は、その中で、実際のボイド使い許容、async button click eventている、しかし、次のよう、あなたのコードの別の側面を理解してください。

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

は今、あなたがである、UIスレッド上で実行する必要がInvalidOperationExceptionにつながるUIコントロール、のいずれかを更新するためにそれを使用することはできません、ThreadPool threadAsync通話を開始しますAsyncコールの0

2

catchブロック内にいる場合、タスクはすでに実行を停止しています。

2

「タスク」がエラーなしで正常に実行された場合、または例外が検出された場合でも、アプリケーションの他の場所でタスクを停止/キャンセルする必要がありますか?

タスクは1回だけ完了します。

既に完了している(または正常に終了した)場合は、キャンセルできません。

関連する問題