Bos*_*eek 0 c# task task-parallel-library async-await
我在这里想做的是,根据父任务执行,我尝试执行或取消后续的异步任务。我发现很难全神贯注于以下内容的执行并尝试以最优化的方式实现它。我正在寻找一种以最优化的方式编写此内容的方法。
另外,我很困惑为什么即使在抛出异常之后它仍然继续下一次迭代并等待任务找出抛出的异常。我找不到对此的解释。
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();
}
Run Code Online (Sandbox Code Playgroud)
作为一般规则,不要使用ContinueWith. 改用await:
public static async Task<TOut> AndThen<TIn, TOut>(this Task<TIn> sourceTask, Func<TIn, Task<TOut>> sf, CancellationToken cancelToken)
{
var res = await st;
cancelToken.ThrowIfCancellationRequested();
return await sf(res);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |