2013-09-16 122 views
0

我有下面的代码,它创建了多个任务来同时处理数据。我想知道完成他们工作的任务会发生什么?他们是否自动处置?使用Task.Factory.StartNew时完成的任务会发生什么

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

上面的代码被调用时,有更多的项目来处理每隔几秒钟,我担心的是会任务的数量继续增长?

回答

6

他们只会收集垃圾。没关系 - 你不需要担心它们。

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

话虽如此,在我看来,如果您使用Parallel.ForEach而不是“手动”启动任务并等待它们全部完成,那么您的代码会更简单。

+0

我正在调查Parallel.ForEach。感谢您的澄清和指向Parallel.ForEach。 – isakavis

相关问题