當我們使用foreach
和Tasks
我們需要使用局部變量是這樣的:Parallel.Foreach VS的foreach和任務局部變量
List<Task> TaskPool = new List<Task>();
foreach (TargetType Item in Source)
{
TargetType localItem = Item;
TaskPool.Add(Task.Factory.StartNew(() => DoSomething(localItem)));
}
Task.WaitAll(TaskPool.ToArray());
但如何Parallel.Foreach
,我用這樣的:
Parallel.ForEach(Source, (TargetType item) => DoSomething(item));
所以沒有任何局部變量,如你所見。但Parallel.Foreach
如何工作?是否不需要引入任何局部變量?或者如果需要,我該如何定義它?
UPDATE
是否有.NET 4和.NET 4.5有什麼區別?
從C#5開始,實際上本地變量是不必要的,因爲循環變量在循環內部是語義上的。 – 2013-04-06 05:52:36
@mikez你是什麼意思的循環?你的意思是'foreach'和'Parallel.foreach'?如是?那麼.NET 4如何? – Saeid 2013-04-06 06:01:57
在C#5中,'foreach'循環中不需要局部變量(我會說'Parallel.ForEach'是一個方法調用而不是循環)。在C#4中是必要的。我還會注意到這是編譯器行爲,而不是運行時行爲。這是從以前的編譯器版本的「突破」變化。見http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx – 2013-04-06 06:15:12