2013-09-16 60 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

相關問題