次のコードがあるとします。
// TCO = TaskContinuationOptions
FirstAsyncMethod()
.ContinueWith(t => SecondAsyncMethod(t.Result), TCO.OnlyOnRanToCompletion)
.ContinueWith(t => HandleErrors(t));
そのまま実行してFirstAsyncMethod
例外をスローすると、 onがチェーン全体を停止するHandleErrors
ため、呼び出されることはありません。TaskContinuationOptions
SecondAsyncMethod
一方、 on を削除するTaskContinuationOptions
とSecondAsyncMethod
、アクセスするTask.Result
と元の AggregateException の InnerException としてAggregateException
スローされます。私の実際のコードでは、これによりアンラップする必要のあるばかげた階層が生成されます。
の結果をキャプチャ (つまりチェーン) しませんがContinueWith
、明らかに問題にHandleErrors
なる前に呼び出されます。SecondAsyncMethod
a に適用TaskContinuationOptions
して、ContinueWith
そのステップのみを潜在的にスキップし、後続のステップをスキップする方法はありますか?