非同期プログラミングの領域では、例外を効果的に管理することが重要です。 System.Threading.Tasks.Task
C# 5.0 以降: 非同期でレスキューを待機
革新的な async および await キーワードの導入により、C# 5.0 以降では簡素化されたキーワードが提供されます。例外処理のソリューション。これらのキーワードを使用すると、コンパイラがタスクと非同期プログラミング パターンを使用するようにコードを変換しながら、線形形式でコードを作成できます。
このアプローチを採用するには、単にコードを、で指定されたメソッド内の try-catch ブロックでラップします。 async キーワード。
try { // Start the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // Await the task. await task; } catch (Exception e) { // Perform cleanup here. }
C# 4.0 以下: TaskContinuationOptions
以前のバージョンの C# では、TaskContinuationOptions 列挙からパラメーターを受け取る ContinueWith オーバーロードを利用できます。これにより、継続タスクの実行条件を指定できます。
具体的には、OnlyOnFaulted オプションを使用すると、先行タスクが例外をスローした場合にのみ継続タスクが実行されるようになります。
// Get the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
例外的でないケースの処理
例外的でないケースを処理するにはC# 4.0 以前では、同じ先行タスクに対して複数の ContinueWith タスクを作成できます。たとえば、正常に完了すると実行されるタスクを作成できます:
// Get the task. var task = new Task<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); // If it succeeded. task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion); // Run task. task.Start();
以上がC# タスクで例外を効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。