简介:任务并行库(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

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

最新文章

  1. thinkphp 动态 级联
  2. java提高篇(八)----详解内部类
  3. 1057. Stack (30)
  4. jQuery.parseJSON(json) 使用方法
  5. 转:Nginx+Apache环境的安装与配置
  6. Eclipse 安装 CDT
  7. 2015-10-13 晴 tcp/ip卷1
  8. underscorejs-sample学习
  9. 【iOS开发之C语言】sprintf,strncpy,strcmp三个函数的区别
  10. 暴力或随机-hdu-4712-Hamming Distance
  11. 稀疏分解中的MP与OMP算法
  12. 云计算之路-阿里云上-容器难容:优化自建 docker swarm 集群的部署
  13. centos6.2安装桌面环境 与中文支持
  14. mysql的学习笔记(三)
  15. java 随机生成6位短信验证码
  16. week07 codelab02 C72
  17. java用流的方式加载图片
  18. 信号基础知识--FFT DFT
  19. 【工具相关】Web-ionic-npm的安装
  20. luogu P1943 LocalMaxima_NOI导刊2009提高(1)

热门文章

  1. GraphQL学习之原理篇
  2. Python基础——循环语句、条件语句、函数、类
  3. java--demo之猜拳游戏
  4. Oracle10G安装手册
  5. PAT甲级 图的遍历 相关题_C++题解
  6. 使用redis和thread告警并避免重复告警
  7. python Django基础操作
  8. 1233: 输出杨辉三角前n行(Java)
  9. go hello world第一个程序
  10. 理解 is_callable