【发布时间】:2019-12-24 22:02:46
【问题描述】:
我在这里尝试做的是基于父任务执行我尝试执行或取消后续异步任务。我发现很难围绕执行以下内容并尝试以最佳方式实现这一点。我正在寻找一种以最优化的方式编写此内容的方法。
另外,我很困惑为什么即使在抛出异常之后它仍会继续下一次迭代并等待任务找出抛出的异常。我找不到关于这个的解释。
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();
}
【问题讨论】:
-
试试
TaskContinuationOptions.NotOnFaulted | TaskContinuationOptions.NotOnCanceled而不是&。 -
如果
sourceTask在故障状态下完成,理想的结果是什么?
标签: c# async-await task task-parallel-library