使用Task.Factory.StartNew时,完成的任务会发生什么

时间:2013-09-16 18:57:38

标签: c# task-parallel-library

我有以下代码,它创建了多个任务来同时处理数据。我想知道完成工作的任务会发生什么变化?他们会自动处理吗?

 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());

当需要处理更多项目时,每隔几秒就会调用上面的代码,我担心的是任务数量会继续增加吗?

1 个答案:

答案 0 :(得分:6)

他们只会收集垃圾。那很好 - 你不需要担心它们。

特别是,即使Task实现IDisposable,您基本上也不需要处理它们。请参阅Stephen Toub的blog post on the topic以获得明确的建议和背景。

话虽如此,在我看来,如果您使用Parallel.ForEach代替“手动”启动任务并等待所有任务完成,您的代码会更简单。