我有以下代码,它创建了多个任务来同时处理数据。我想知道完成工作的任务会发生什么变化?他们会自动处理吗?
var itemListByGroups = items.GroupBy(x => x.SomeValue);
List<Task> tasks = new List<Task>();
// Can create 20 to 30 tasks based on the result of the grouping
foreach (var itemList in itemListByGroups)
{
var task = Task.Factory.StartNew(() =>
{
// intense processing
});
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
当需要处理更多项目时,每隔几秒就会调用上面的代码,我担心的是任务数量会继续增加吗?
答案 0 :(得分:6)
他们只会收集垃圾。那很好 - 你不需要担心它们。
特别是,即使Task
实现IDisposable
,您基本上也不需要处理它们。请参阅Stephen Toub的blog post on the topic以获得明确的建议和背景。
话虽如此,在我看来,如果您使用Parallel.ForEach
代替“手动”启动任务并等待所有任务完成,您的代码会更简单。