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

使用Task.WhenAll执行任务后,如何访问各任务的调用参数?

解决方法

核心思路是把任务和对应的调用参数绑定在一起存储,而不是只单独保存Task对象。这样后续遍历的时候就能直接拿到每个任务对应的参数,完全不用修改原有服务的返回结构。

具体可以用C#的元组来实现,直观又简洁:

修改你的代码如下:

// 改成保存「参数+任务」的配对列表,替代原来只存Task的列表
var taskWithParams = new List<(YourParamType Param, Task<List<myclass>> Task)>();

foreach (var item in list)
{
    // 将参数item和对应的任务一起加入列表
    taskWithParams.Add((item, _someservice.getsome(item)));
}

// 提取所有任务执行Task.WhenAll
var tasks = taskWithParams.Select(t => t.Task).ToArray();
var taskResults = await Task.WhenAll(tasks);

List<databaseclass> to_be_saved = new List<databaseclass>();

// 遍历配对列表,同时获取参数和任务结果
foreach (var pair in taskWithParams)
{
    // pair.Param 就是当前任务的调用参数
    var param = pair.Param;
    // 因为已经通过WhenAll完成了所有任务,这里await会立即返回结果
    var result = await pair.Task;

    // 用param和result初始化databaseclass
    to_be_saved.Add(new databaseclass
    {
        // 示例:根据实际字段填充
        // ParamRelatedField = param.SomeProperty,
        // ResultRelatedField = result.FirstOrDefault()?.Data
    });
}

补充说明

  • 把YourParamType替换成你实际的参数类型(也就是list集合里元素的类型)
  • 如果不习惯用元组,也可以自定义一个简单类来存参数和任务:
public class TaskWithParam
{
    public YourParamType Param { get; set; }
    public Task<List<myclass>> Task { get; set; }
}

然后用List<TaskWithParam>存储,用法和元组完全一致。

内容的提问来源于stack exchange,提问作者yunus emre kaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:05:02