gpt4 book ai didi

c# - Task.WaitAll 在所有任务完成之前返回

转载 作者:太空宇宙 更新时间:2023-11-03 21:15:53 26 4
gpt4 key购买 nike

WaitAll 不工作。我在任务完成之前得到完成

我有一些群组。每个组都包含项目,我希望每个项目在单独的任务中处理。

static void Main(string[] args)
{

List<Task> TaskList = new List<Task>();
foreach (string group in groups)
{
Task task = new Task(() => { scan_group(group, timeout); });
task.Start();
TaskList.Add(task);
}

Task.WaitAll(TaskList.ToArray());
Console.WriteLine("- Done !" );
}

public static void scan_group (){
Task.Factory.StartNew(() => Parallel.ForEach<string>(items, x =>
{
scan(x, y);
}));
}

最佳答案

scan_group 所做的只是启动一个任务,而不是等待它完成,或者将它返回到外部等待。

因此您只等待创建内部任务,而不是等待它们完成。这就是您在内部任务运行之前得到 Done 的原因。

如果要等待 scan_group 任务,返回它们并将它们存储在列表中,而不是使用任务构造函数创建任务。例如:

foreach (string group in groups)
{
TaskList.Add(Task.Factory.StartNew(() => Parallel.ForEach<string>(items, x => scan(x, y))));
}

Task.WaitAll(TaskList.ToArray());

注意:直接使用 Task 构造函数几乎不是正确的解决方案。此外,如果您使用的是 .Net 4.5 及更高版本,则 Task.Run 优于 Task.Factory.StartNew

关于c# - Task.WaitAll 在所有任务完成之前返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com