取决于父任务结果的链式异步功能

问题描述 投票:0回答:1

我在这里要做的是,基于父任务的执行,我试图执行或取消后续的异步任务。我发现很难全神贯注于执行以下命令,并试图以最佳方式实现这一点。我正在寻找一种以最优化的方式编写此代码的方法。

另外,为什么抛出异常后,它仍然继续下一次迭代并等待任务找出抛出的异常,我还是感到困惑。我找不到关于此的解释。

 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();
 }
c# async-await task task-parallel-library
1个回答
4
投票

作为一般规则,don't use ContinueWith。使用ContinueWith代替:

await
© www.soinside.com 2019 - 2024. All rights reserved.