码迷,mamicode.com
首页 > Windows程序 > 详细

c# 用Parallel类来进行并行操作

时间:2015-07-29 15:26:06      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

Parallel 来进行 不需要同步操作的线程任务  非常方便

注意 一定要是 不需要同步的任务

Parallel提供了三个主要的方法 For Foreach Invoke。

for方法主要针对数组 共三个参数  分别是 起始序号 末尾序号 和一个Action的委托(无返回值),这是用Lambda表达式写比较方便

1 Parallel.For(0, arr.Length, i =>
2 {
3     //直接在这里使用串行循环,则速度很快
4   for (int j = 0; j < OperationCounterPerDataItem; j++)
5     arr[i]++;
6 }
7 );

foreach 用于对集合的遍历操作   每个数据 Parallel会自动分配线程 非常方便

1 var intList = Enumerable.Range(1, 8);
2 Parallel.ForEach(intList,(DataItem)=>{
3   Console.WriteLine("处理数据项{0},由线程{1}负责执行", DataItem, Thread.CurrentThread.ManagedThreadId);
4 });

Invoke用于对多个并行任务的调用   非常直观简洁

 1         static void DoWork1()
 2         {
 3             Console.WriteLine("工作一,由线程{0}负责执行……", Thread.CurrentThread.ManagedThreadId);
 4         }
 5         static void DoWork2()
 6         {
 7             Console.WriteLine("工作二,由线程{0}负责执行……", Thread.CurrentThread.ManagedThreadId);
 8         }
 9         static void DoWork3()
10         {
11             Console.WriteLine("工作三,由线程{0}负责执行……", Thread.CurrentThread.ManagedThreadId);
12         }
13 
14         static void TestParallelInvoke()
15         {
16             Console.WriteLine("主线程{0}启动并行操作……", Thread.CurrentThread.ManagedThreadId);
17             Parallel.Invoke(
18                 () => DoWork1(),
19                 () => DoWork2(),
20                 () => DoWork3()
21                 );
22             Console.WriteLine("并行操作结束,敲任意键退出主线程{0}……", Thread.CurrentThread.ManagedThreadId);
23         }

 

再次强调   若数据要按顺序处理 需要同步操作 不能使用Parallel

c# 用Parallel类来进行并行操作

标签:

原文地址:http://www.cnblogs.com/threezj/p/4685744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!