C#任务并行Parellel.For和Parallel.ForEach

简介:任务并行库(Task Parellel Library)是BCL的一个类库,极大的简化了并行编程。

使用任务并行库执行循环

C#当中我们一般使用for和foreach执行循环,有时候我们呢的循环结构每一次的迭代需要依赖以前一次的计算或者行为。但是有时候则不需要。如果迭代之间彼此独立,并且程序运行在多核处理器上,如果能将不同的迭代放到不同的处理器上并行处理,则会获益匪浅。Parallel.For和Parallel.ForEach就是为此而生的。

①使用Parallel.For 声明如下:

这里可以看到 toExclusive这个参数,它是不含的, 在使用的时候传入参数要注意下。

举个例子:

static void Main(string[] args) { Parallel.For(0, 5, i => { //打印平方 Console.WriteLine("The Square of {0} is {1}", i, i * i); } ); Console.ReadKey(); }

执行结果:

The Square of 0 is 0
The Square of 2 is 4
The Square of 1 is 1
The Square of 4 is 16
The Square of 3 is 9

从执行结果上我们可以看到,它不是按顺序执行的。那么问题来了,怎么让结果保持有序?

我们可以通过一个数组来存储执行的结果,例如下面的例子:

static void Main(string[] args) { const int maxValues = 5; int[] Squares = new int[maxValues]; Parallel.For(0, maxValues , i =>Squares[i] = i*i ); for (int i = 0; i < maxValues; i++) Console.WriteLine("Square of {0} is {1}", i, Squares[i]); Console.ReadKey(); }

我们首先定义了一个数组,然后由于数组的下标已经定下来了,所以每次执行都会存入具体的位置,然后遍历结果的数组,就得到了有顺序的结果。

②使用Parallel.ForEach

最简单的实现,声明如下:

举例:

static void Main(string[] args) { string[] squares = new string[] {"We", "hold", "these", "truths", "to", "be", "self-evident", "that", "all", "men", "are", "created", "equal"}; Parallel.ForEach(squares, i => Console.WriteLine(string.Format("'{0}' has {1} letters", i, i.Length))); Console.ReadKey(); }

结果:

'We' has 2 letters
'hold' has 4 letters
'these' has 5 letters
'to' has 2 letters
'truths' has 6 letters
'self-evident' has 12 letters
'that' has 4 letters
'be' has 2 letters
'men' has 3 letters
'are' has 3 letters
'created' has 7 letters
'equal' has 5 letters
'all' has 3 letters

这里同样可以看到,不是按顺序遍历的。 

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对易知道(ezd.cc)的支持。

推荐阅读

    雷蛇设置宏|雷蛇设置宏循环

    雷蛇设置宏|雷蛇设置宏循环,,雷蛇设置宏循环使用雷蛇软件设置宏驱动的方法如下:1、今天小编就以雷蛇鼠标为例,介绍宏定义的使用。当刚买的鼠

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

    potplayer设置|potplayer设置循环播放

    potplayer设置|potplayer设置循环播放,,potplayer设置循环播放戴尔电脑上面比较好用的软件有哪些?萊垍頭條敬业签是电脑/移动端/多端云同步

    执行快捷键|执行快捷键是哪个

    执行快捷键|执行快捷键是哪个,,执行快捷键是哪个方法/步骤1/4也可以在“开始”菜单中快速调出“运行”,鼠标右键单击“开始”,选择属性点击

    迭代器模式

    迭代器模式,迭代,遍历,2021年11月27日18:24:29迭代器模式定义Provide a way to access the elements of an aggregate object sequentiall

    怎么设置循环录像|如何设置循环录像

    怎么设置循环录像|如何设置循环录像,,1. 如何设置循环录像手机拍视频可以点暂停,再有要拍摄的内容可以重新点拍摄,这样拍下的多段视频就可以

    循环快捷键设置|循环选择快捷键

    循环快捷键设置|循环选择快捷键,,1. 循环选择快捷键 操作方法:1、同时按住键盘shift键和空格键,鼠标左键单击最左端选中最短的。2、松开shif