タスクの例外処理テクニック
非同期プログラミングの分野では、System.Threading.Tasks.Task
オプション 1: 非同期と待機 (C# 5.0 以降)
C# 5.0 の出現により、非同期と待機はawait キーワードは、例外処理のためのよりクリーンで合理的な方法を提供します。以下に示すように、ContinueWith をバイパスし、try/catch ブロックを利用して例外をキャプチャし、シーケンシャルな方法でコードを記述することができます。
try { await task; } catch (Exception e) { // Handle exceptions }
オプション 2: ContinueWith オーバーロード (C# 4.0 以前)
以前のバージョンの C# では、ContinueWith のオーバーロードを使用するという代替アプローチを採用できます。 TaskContinuationOptions 型のパラメータを受け入れます。これにより、先行タスクの状態に基づいてどの継続を実行するかをきめ細かく制御できます。特に例外を処理するには、OnlyOnFaulted オプションを使用します。
task.ContinueWith(t => { /* Handle exceptions */ }, context, TaskContinuationOptions.OnlyOnFaulted);
実装例
提供された例では、次のように ContinueWith を利用してコードを再構築することを検討できます。 🎜>
public class ChildClass : BaseClass { public void DoItInAThread() { var context = TaskScheduler.FromCurrentSynchronizationContext(); Task.Factory.StartNew<StateObject>(() => this.Action()) .ContinueWith(e => this.ContinuedAction(e), context) .ContinueWith(t => HandleExceptions(t), context, TaskContinuationOptions.OnlyOnFaulted); } private void ContinuedAction(Task<StateObject> e) { if (e.IsFaulted) { return; // Skip execution if faulted } // Perform action with e.Result } private void HandleExceptions(Task task) { // Display error window and log the error } }
以上がC# 非同期タスクで例外を効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。