介绍
C# 4.0 的新特性之并行运算

  • Parallel.For - for 循环的并行运算 
  • Parallel.ForEach - foreach 循环的并行运算 
  • Parallel.Invoke - 并行调用多个任务 
  • Task - 任务,基于线程池。其使我们对并行编程变得更简单,且不用关心底层是怎么实现的
  • PLINQ - 用于对内存中的数据做并行运算,也就是说其只支持 LINQ to Object 的并行运算
  • LIST等泛型启用并行计算很简单,使用AsParallel()即可



示例
1、Parallel.For 的 Demo
Parallel/ParallelFor.aspx.cs

C# 4.0 新特性之并行运算(Parallel)
代码
            return i;
        }
    }
}

/*
运行结果:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2000.0514

0
13
1
19
7
12
18
6
2
8
10
14
4
16
5
3
15
17
9
11
300.0077
*/
C# 4.0 新特性之并行运算(Parallel)



2、Parallel.ForEach 的 Demo
Parallel/ParallelForEach.aspx.cs

C# 4.0 新特性之并行运算(Parallel)
代码
            return i;
        }
    }
}

/*
运行结果:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2000.0514

0
6
12
18
1
2
7
13
19
4
3
8
14
9
5
15
10
16
11
17
600.0154
*/
C# 4.0 新特性之并行运算(Parallel)



3、Parallel.Invoke 的 Demo
Parallel/ParallelInvoke.aspx.cs

C# 4.0 新特性之并行运算(Parallel)
代码
        }
    }
}

/*
运行结果:
Task2 - ThreadId:26 - 09:11:58
Task1 - ThreadId:25 - 09:11:58
Task3 - ThreadId:24 - 09:11:58
*/
C# 4.0 新特性之并行运算(Parallel)



4、Task 的 Demo
Parallel/ParallelTask.aspx.cs

C# 4.0 新特性之并行运算(Parallel)
代码
                Thread.Sleep(1000);
            }
        }
    }
}

/*
运行结果:
开始执行,3.5 秒后结束
Task2 - ThreadId: 6
Task1 - ThreadId: 48
Task1 - ThreadId: 48
Task2 - ThreadId: 6
Task2 - ThreadId: 6
Task1 - ThreadId: 48
Task2 - ThreadId: 6
Task1 - ThreadId: 48
结束
*/
C# 4.0 新特性之并行运算(Parallel)



5、PLINQ 的 Demo
Parallel/ParallelPLINQ.aspx.cs

C# 4.0 新特性之并行运算(Parallel)
代码

            // 自定义聚合方法做并行运算的 Demo(实现一个取集合的平均值的功能)
            double myAggregateResult = list.AsParallel().Aggregate(
                // 聚合变量的初始值
                0d,   

                // 在每个数据分区上,计算此分区上的数据
                // 第一个参数:对应的数据分区的计算结果;第二个参数:对应的数据分区的每个数据项
                (value, item) => 
                {
                    double result = value + item;
                    return result; 
                },

                // 根据每个数据分区上的计算结果,再次做计算
                // 第一个参数:全部数据的计算结果;第二个参数:每个数据分区上的计算结果
                (value, data) =>
                {
                    double result = value + data;
                    return result;
                },

                // 根据全部数据的计算结果再次计算,得到最终的聚合结果
                (result) => result / list.Count
            );

            Response.Write(myAggregateResult.ToString());
        } 
    }
}

/*
运行结果:
0
10
20
30
40
50
60
70
80
90
49.5
49.5 
*/
C# 4.0 新特性之并行运算(Parallel)
 
 
注:关于并行运算的实例可以参考
http://code.msdn.microsoft.com/ParExtSamples

相关文章: