标签:
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
标签:
原文地址:http://www.cnblogs.com/threezj/p/4685744.html