.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(0, nums.Length,

               () => { 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(nums,
               () => { 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 是值

posted on 2010-06-09 11:00  老代哥哥  阅读(315)  评论(0编辑  收藏  举报

导航