gpt4 book ai didi

c# - 向现有 WaitAll 添加更多任务

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:50 24 4
gpt4 key购买 nike

假设我有一个 Task 的集合s,我要去 WaitAll()在。假设,在他们全部完成之前,我想向该集合添加更多任务,并且我希望等待继续等待,直到他们也全部完成。我可能会在结束之前添加更多任务,等等。

我可以使用 TPL 做到这一点吗?或者我将不得不手动滚动我自己的线程管理? (恶心!)

WaitAll()作用于 Task[]所以我不能只有一个 List<Task>我称之为.ToArray()打开,因为 Wait 不会知道添加的任何新任务?

关于WaitAny()的类似问题申请。

最佳答案

这是 WaitAll 的一种解决方案:

假设您有以下列表来保存任务:

List<Task> tasks = new List<Task>();

以下是等待它们的方法:

while (true)
{
Task[] my_tasks;

lock (tasks)
{
my_tasks = tasks.ToArray(); //take snapshot
tasks.Clear(); //clear list
}

if (my_tasks.Length == 0)
break;

Task.WaitAll(my_tasks);
}

只需确保在向列表中添加任务时锁定列表即可:

lock (tasks)
{
tasks.Add(...
}

顺便问一下,为什么您要同步等待任务而不是异步等待(您使用的是 WaitAll 而不是 WhenAll)?

关于c# - 向现有 WaitAll 添加更多任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36632899/

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