.NET 4.0中的Parallel.For 和 Parallel.ForEach的用法
记录在此,以做备案。
public static void ForTest1()
{
int[] nums = Enumerable.Range(1, 10000000).ToArray();
long total = 0;
Console.WriteLine();
// Use type parameter to make subtotal a long, not an int
Parallel.For
() => { return 0; },//----------------------preResult的初始值
(itemIndex, loopState, preResult) =>
{
return preResult + nums[itemIndex];
},
(rs) =>
{
//----------------rs:是循环体执行完毕后返回的结果。
// Console.WriteLine("{0}--{1}", Thread.CurrentThread.ManagedThreadId, rs);
//每一个现成执行完毕后调用
Interlocked.Add(ref total, rs);
});
long s2=0;
Parallel.ForEach
() => { return 0; },
(item, loopState, preResult) =>
{
return preResult + item;
},
(rc) =>
{
// Console.WriteLine("{0}--{1}", Thread.CurrentThread.ManagedThreadId, rc );
Interlocked.Add(ref s2, rc);
});
Console.WriteLine(total);
Console.WriteLine(s2);
}
//---------------------2者的区别主要是执行体的第一个参数的取值:for是索引号,ForEach 是值