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
相关产品推荐
相关产品推荐

