You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Task.WhenAll执行结果中返回所有未被取消的任务

实现方案

核心逻辑是先等待所有任务执行到结束状态(无论成功、取消、异常),再过滤出符合要求的成功任务提取结果,改造后的代码如下:

var tasks = new List<Task<string>>();

/** 此处省略业务代码 **/

// 等待所有任务执行完毕,吞掉WhenAll抛出的取消/异常信息
await Task.WhenAll(tasks).ContinueWith(static t => { });

// 筛选所有未取消、执行成功的任务结果
var validResults = tasks
    .Where(task => !task.IsCanceled && task.IsCompletedSuccessfully)
    .Select(task => task.Result)
    .ToList();

补充说明

  • 如果你需要收集任务抛出的业务异常,可以额外判断task.IsFaulted属性,从task.Exception中读取异常信息
  • 该方案不会干预各任务独立的CancellationTokenSource逻辑,任务取消仍然互不影响
  • 代码中已经通过Task.WhenAll确认所有任务执行完毕,此时访问task.Result不会造成线程阻塞,也不会触发未完成任务的异常

内容的提问来源于stack exchange,提问作者AmandaSai98b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:57:02