【发布时间】:2019-01-24 06:18:41
【问题描述】:
我想创建无限 Task 循环。当任何任务完成工作时,它将从任务列表中删除,并将新任务添加到列表中。我的代码提议:
// create list of 128 task in queue
List<Task> tasks = new List<Task>();
for (int n = 0; n < 128; n++)
{
tasks.Add(Task.Run(() => JOB(n);
}
// wait for finish and add immediately new running task to the list
while (tasks.Count > 0)
{
Task firstFinishedTask = Task.WhenAny(tasks);
tasks.Remove(firstFinishedTask); // line with problem
tasks.Add(Task.Run(() => JOB(n);
}
问题是已完成任务未从列表中删除。他们得到了不同的Task.Id,这是巨大的副作用。
【问题讨论】:
-
当然有办法做到这一点,但是请你解释一下你想要达到的目标,我的蜘蛛侠直觉告诉我有更好的方法
-
比如什么是job,为什么需要128个,这个IO绑定的work吗?
-
我会设计它,以便在工作为
finished时发布一个事件。然后删除了those作业。 - 更容易 -
无论您的问题是什么,我确信创建一个包含 128 个任务的固定池来解决它是错误的解决方案。
-
@TheGeneral 是的,这是 IO 绑定。从 Internet 下载数据。
标签: c# multithreading task