给定以下代码:
// TCO = TaskContinuationOptions
FirstAsyncMethod()
.ContinueWith(t => SecondAsyncMethod(t.Result), TCO.OnlyOnRanToCompletion)
.ContinueWith(t => HandleErrors(t));
如果我按原样执行它并FirstAsyncMethod
引发异常,HandleErrors
则永远不会调用它,因为TaskContinuationOptions
onSecondAsyncMethod
会停止整个链。
另一方面,如果我删除TaskContinuationOptions
on SecondAsyncMethod
,访问Task.Result
会导致一个作为原始 AggregateException 的 InnerExceptionAggregateException
被抛出。在我的实际代码中,这会产生一个需要展开的荒谬层次结构。
我没有捕获(即链) , 的结果ContinueWith
,在这HandleErrors
之前被调用,SecondAsyncMethod
这显然是一个问题。
有没有办法应用TaskContinuationOptions
到 aContinueWith
以便它只可能跳过该步骤,而不是任何后续步骤?