2012-10-31 21 views
-2

我看了微軟在MSDN上的任務教程...它顯示的東西很好,但我仍然有問題在那裏例子...在這發現URL:MSDN LinkSystem.Threading.Task庫在.NET中特別是Parallel.ForEach

他們展示了一個例子,他們展示了一個Parallel.ForEach()靜態方法調用。在那個方法中,他們有四個參數......第一個參數是否必須是一個Ints數組?或者它可能是所有線程正在處理的任何類型的集合或對象?看起來第二個參數是一個Action,它是一個不返回值(或void)的委託。第二個變量是什麼?線程局部初始化器?爲什麼初始化爲0?到底在這裏設置了什麼?第三個參數只是一個委託(或者我喜歡認爲它們的一個函數點)是lambda表達式右側的實際函數?例如,我可以在那邊放一個實際功能的名字,而不必在那裏寫出來嗎?例如...

public int localSum(int n, ParallelLoopState loopState, int localSum) { 
     localSum += n; 
     Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum); 
     return localSum; 
    } 

(n, loopState, localSum) => localSum(int n, ParallelLoopState loopState, int localSum), 
+2

你看過「Parallel.ForEach」的文檔嗎?這聽起來像它會回答你所有的問題... –

+0

這是並行聚合,它在這裏廣泛覆蓋http://msdn.microsoft.com/en-us/library/ff963547.aspx –

回答

1

貌似this overload

public static ParallelLoopResult ForEach<TSource, TLocal>(
    IEnumerable<TSource> source, 
    Func<TLocal> localInit, 
    Func<TSource, ParallelLoopState, TLocal, TLocal> body, 
    Action<TLocal> localFinally 
) 

,你必須:

Parameters 

source 
    Type: System.Collections.Generic.IEnumerable<TSource> 

    An enumerable data source. 

localInit 
    Type: System.Func<TLocal> 

    The function delegate that returns the initial state of the local data for each task. 

body 
    Type: System.Func<TSource, ParallelLoopState, TLocal, TLocal> 

    The delegate that is invoked once per iteration. 

localFinally 
    Type: System.Action<TLocal> 

    The delegate that performs a final action on the local state of each task. 
0

第二個參數是一個Action<int>它就像一個普通的foreach循環體。使用Parallel.ForEach最簡單的方法是在兩個參數超載:

Parallel.ForEach(myIntegers, i => loopBody(i)); 

// non-parallel equivalent 
foreach(int i in myIntegers) 
{ 
    loopBody(i); 
} 

myIntegers可以是任何IEnumerable<int>,因而必須不一定是一個數組。

相關問題