标签:
1 方式一: 2 static int ParallelSum(IEnumerable<int> values) 3 { 4 object mutex = new object(); 5 int result = 0; 6 Parallel.ForEach(source: values, 7 localInit: () => 0, 8 body: (item, state, localValue) => localValue + item, 9 localFinally: localValue => 10 { 11 lock (mutex) 12 result += localValue; 13 }); 14 return result; 15 } 16 17 方式二: 18 static int ParallelSum(IEnumerable<int> values) 19 { 20 return values.AsParallel().Sum(); 21 } 22 23 方式三: 24 static int ParallelSum(IEnumerable<int> values) 25 { 26 return values.AsParallel().Aggregate( 27 seed: 0, 28 func: (sum, item) => sum + item 29 ); 30 }
按照并行LINQ(PLINQ)的默认方式,输出队列的次序是不固定的,也可以指明要保持原样的次序,如下:
1 //输出是无序的 2 static IEnumerable<int> MultiplyBy2(IEnumerable<int> values) 3 { 4 return values.AsParallel().Select(item => item * 2); 5 } 6 //输出保持原有的次序 7 static IEnumerable<int> MultiplyBy2(IEnumerable<int> values) 8 { 9 return values.AsParallel().AsOrdered().Select(item => item * 2); 10 }
Parallel 类可适用于很多场合,但是在做聚合或进行数据序列的转换时, PLINQ 的代码更
加简洁。有一点需要注意,相比 PLINQ, Parallel 类与系统中其他进程配合得更好.
标签:
原文地址:http://www.cnblogs.com/goodlucklzq/p/4677487.html