我在这里要做的是,基于父任务的执行,我试图执行或取消后续的异步任务。我发现很难全神贯注于执行以下命令,并试图以最佳方式实现这一点。我正在寻找一种以最优化的方式编写此代码的方法。
另外,为什么抛出异常后,它仍然继续下一次迭代并等待任务找出抛出的异常,我还是感到困惑。我找不到关于此的解释。
public static async Task<TOut> AndThen<TIn, TOut>(this Task<TIn> sourceTask, Func<TIn, Task<TOut>> sf, CancellationToken cancelToken)
{
return await sourceTask.ContinueWith(async st => {
var res = await st; // Raising cancel request in here.
cancelToken.ThrowIfCancellationRequested();
return await sf(res);
}, TaskContinuationOptions.NotOnFaulted & TaskContinuationOptions.NotOnCanceled).Unwrap();
}
作为一般规则,don't use ContinueWith
。使用ContinueWith
代替:
await