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

作者:奋斗的大橙子 时间:2022-04-19 22:07:58 

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

使用任务并行库执行循环

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

①使用Parallel.For 声明如下:

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

这里可以看到 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

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

C#任务并行Parellel.For和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

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

来源:https://www.cnblogs.com/dcz2015/p/11015163.html

标签:C#,Parellel,For,ForEach,任务,并行
0
投稿

猜你喜欢

  • 一文搞懂Spring中的注解与反射

    2023-11-11 11:38:18
  • Android studio实现PopupWindow弹出框效果

    2021-12-19 11:12:50
  • Java异常 Factory method'sqlSessionFactory'rew exception;ested exception is java.lang.NoSuchMethodError:

    2022-03-25 15:06:42
  • springboot如何重定向外部网页

    2022-11-12 05:19:19
  • Android仿通话来电界面效果

    2022-01-02 07:48:51
  • 在AndroidManifest.xml中uses-sdk内属性意思

    2021-10-08 17:16:09
  • Android下的CMD命令之关机重启及重启recovery

    2023-06-20 23:08:21
  • 详解Android的两种事件处理机制

    2023-10-05 23:37:20
  • 一文带你深入了解Java泛型

    2022-02-10 05:38:02
  • java中File类的使用方法

    2023-09-11 11:49:55
  • Android 应用启动欢迎界面广告的实现实例

    2023-01-26 07:34:11
  • 浅谈Java(SpringBoot)基于zookeeper的分布式锁实现

    2023-11-16 08:14:56
  • Android测量每秒帧数Frames Per Second (FPS)的方法

    2022-01-21 05:43:15
  • java实现给图片加铺满的网格式文字水印

    2023-07-30 05:22:12
  • Java基于Swing实现的打猎射击游戏代码

    2021-06-29 17:04:56
  • C#采用FileSystemWatcher实现监视磁盘文件变更的方法

    2023-12-10 02:52:49
  • Java实现分布式系统限流

    2022-05-31 22:38:05
  • Android 列表形式的切换的示例代码

    2022-12-17 07:38:24
  • C#多线程学习之Thread、ThreadPool、Task、Parallel四者区别

    2023-08-27 05:32:14
  • Java基于IO流读取文件的方法

    2023-08-11 16:23:57
  • asp之家 软件编程 m.aspxhome.com