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

Task.WhenAll未等待任务完成:代码问题排查及解决方案

问题:Task.WhenAll未正常工作,代码未等待10秒就执行完成

我编写了如下代码,理论上应等待10秒,但实际却立即执行完成,Task.WhenAll方法未正常工作——我哪里出错了?

public class WhenAllIsNotWorking
{
    public async Task myFunc()
    {
        await Task.Delay(10000);
    }

    public async void Init()
    {
        var tasks = new List<Task>();
        for (var i = 0; i < 10; i++)
        {
            tasks.Add(new Task(async () => { await myFunc();  }));
        }
        foreach (var task in tasks)
        {
            task.Start();
        }
        await Task.WhenAll(tasks);
    }
}

补充说明:上述是我真实代码的简化示例——实际场景中我需要遍历层级实体树,为每个实体注册操作(因此我使用new Task()搭配task.Start())。完成所有操作注册后,我会将它们分组,之后调用task.Start()以按实体类型顺序执行操作。当然,若不是Task.WhenAll无法正常工作,这正是我想要实现的效果。

我的解决方案:之前的问题被关闭了,我无法再发布答案,以下是我最终采用的实现方式——感谢大家的帮助!

public class WhenAllIsNotWorking
{
    public async Task myFunc()
    {
        await Task.Delay(10000);
    }

    public async Task Init()
    {
        var tasks = new List<Func<Task>>();
        for (var i = 0; i < 10; i++)
        {
            tasks.Add(async () => { await myFunc();  });
        }
        var waitList = new List<Task>();
        foreach (var task in tasks)
        {
            waitList.Add(Task.Run(task));
        }
        await Task.WhenAll(waitList);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:54:55