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

如何使用Task.WhenAll运行返回不同数据类型的任务列表

解决不同返回类型异步方法并行执行并获取结果的问题

你不用把任务放到List<Task>里,直接单独保存每个具体类型的Task实例就行,这样等待完成后就能直接拿到返回值:

// 先启动两个异步任务,此时它们已经开始并行执行
var taskTa1 = Ta1();
var taskTa2 = Ta2();

// 等待两个任务都完成
await Task.WhenAll(taskTa1, taskTa2);

// 直接获取结果,因为任务已经完成,这里不会阻塞
var a1 = taskTa1.Result;
var a2 = taskTa2.Result;

// 或者也可以用await,效果一样,因为任务已经处于完成状态
// var a1 = await taskTa1;
// var a2 = await taskTa2;

如果非要用集合类管理任务,也可以用ValueTuple来存储不同类型的Task,再统一等待:

var tasks = (Ta1(), Ta2());
await Task.WhenAll(tasks.Item1, tasks.Item2);

var a1 = tasks.Item1.Result;
var a2 = tasks.Item2.Result;

为什么原来的写法拿不到返回值?

因为List<Task>里存的是基类Task,而只有泛型的Task<TResult>才带有Result属性(或可通过await获取具体类型结果)。把Task<int>和Task<string>转成Task后,就丢失了具体的类型信息,自然没法直接获取各自的返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:24:54