我查看了微软关于MSDN上的任务的教程......这对它显示的内容很有帮助,但我仍然有问题在这个例子中...在这个网址找到:MSDN Link
他们展示了一个示例,其中显示了Parallel.ForEach()静态方法调用。在该方法调用中,它们有四个参数...第一个参数是否必须是Ints数组?或者它可能是所有线程正在处理的任何类型的集合或对象?看起来第二个参数是一个Action,它是一个不返回值(或void)的委托。那第二个变量到底是什么?线程本地初始化器?为什么初始化为0?这到底是怎么回事?第3个参数只是一个委托(或者我喜欢用它来考虑的功能点)是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),
答案 0 :(得分: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.
答案 1 :(得分: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>
,因此不一定是数组。