iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#任务并行Parellel.For和Parallel.ForEach
  • 570
分享到

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

2024-04-02 19:04:59 570人浏览 薄情痞子
摘要

简介:任务并行库(Task Parellel Library)是BCL的一个类库,极大的简化了并行编程。 使用任务并行库执行循环 C#当中我们一般使用for和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

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

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。

--结束END--

本文标题: C#任务并行Parellel.For和Parallel.ForEach

本文链接: https://www.lsjlt.com/news/164186.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#任务并行Parellel.For和Parallel.ForEach
    简介:任务并行库(Task Parellel Library)是BCL的一个类库,极大的简化了并行编程。 使用任务并行库执行循环 C#当中我们一般使用for和foreach执行循环,...
    99+
    2024-04-02
  • C#任务并行Parellel.For和Parallel.ForEach怎么使用
    这篇文章主要介绍了C#任务并行Parellel.For和Parallel.ForEach怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#任务并行Parellel.For和Parallel.ForEac...
    99+
    2023-07-02
  • C#并行编程之Task任务
    目录一、任务与线程二、初识Task三、任务的结果.NET 4.5 :Task.Run四、连续任务五、分离嵌套任务六、子任务七、取消任务八、休眠:等待时间执行九、等待任务执行1、Tas...
    99+
    2024-04-02
  • C#多线程使用Parallel.ForEach并行循环,真的能提高效能
    是的,使用Parallel.ForEach可以提高程序的执行效率。Parallel.ForEach方法可以将一个集合分成多个小块,并...
    99+
    2023-09-23
    C#
  • C#怎么使用Task实现执行并行任务
    这篇“C#怎么使用Task实现执行并行任务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#怎么使用Task实现执行并行任务...
    99+
    2023-07-05
  • C#中如何使用异步任务和并行计算技术
    C#中如何使用异步任务和并行计算技术引言:在当今的软件开发中,效率和性能问题是一直被开发者关注的重点。为了提高应用程序的响应速度和完成复杂任务的效率,C#中提供了异步任务和并行计算技术。本文将详细介绍C#中如何使用异步任务和并行计算技术,并...
    99+
    2023-10-22
    C# 异步任务 并行计算
  • Golang中的任务并发执行和Go WaitGroup
    在Golang中,任务的并发执行可以通过goroutine和channel来实现。Goroutine是轻量级的线程,可以并发执行多个...
    99+
    2023-10-09
    Golang
  • C#多线程开发之任务并行库详解
    目录前言任务并行库 一、创建任务二、使用任务执行基本操作三、处理任务中的异常总结前言 之前学习了线程池,知道了它有很多好处。 使用线程池可以使我们在减少并行度花销时节省操作系统资源。...
    99+
    2024-04-02
  • C++并发编程:如何进行任务调度和线程池管理?
    任务调度和线程池管理是 c++++ 并发编程中提高效率和可扩展性的关键。任务调度:使用 std::thread 创建新线程。使用 join() 方法加入线程。线程池管理:创建 threa...
    99+
    2024-05-06
    c++ 并发编程
  • C#开发中如何处理多任务调度和并行处理问题
    C#开发中如何处理多任务调度和并行处理问题,需要具体代码示例在C#开发中,处理多任务调度和并行处理问题是一项重要的技能。通过利用多核处理器的并行计算能力,可以提高程序的性能和响应速度。本文将介绍如何在C#中使用多线程和任务并行库来处理多任务...
    99+
    2023-10-22
    任务调度 并行处理 C#开发
  • C#怎么Task执行任务
    本篇内容介绍了“C#怎么Task执行任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Task执行任务,等待任务完成代码://任务Func&...
    99+
    2023-07-02
  • Dart怎么实现多任务并行
    本篇内容介绍了“Dart怎么实现多任务并行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Isolate(隔离区域)Dart 是一种支持多任务...
    99+
    2023-07-05
  • 如何处理Go语言中的并发任务的任务调度和任务执行报告问题?
    如何处理Go语言中的并发任务的任务调度和任务执行报告问题?引言:并发任务的任务调度和任务执行报告是Go语言中常见的问题之一。在实际开发中,我们经常需要同时处理多个任务,但是如何高效地调度和执行这些任务,并且能够准确地知道任务的执行情况,对于...
    99+
    2023-10-22
    并发任务调度 并发任务执行报告 Go语言中的处理方法
  • C#使用Task实现执行并行任务的原理的示例详解
    目录一、Task执行并行任务的原理二、5个示例展示示例1示例2示例3示例4示例5三、使用async/await关键字注意示例1示例2四、总结一、Task执行并行任务的原理 使用Tas...
    99+
    2023-05-14
    C# Task执行并行任务 C# Task并行任务 C# Task
  • C#如何Task执行任务,等待任务完成
    目录Task执行任务,等待任务完成C# Task任务队列需求基本的Task用法让Task任务按顺序执行使用异步委托解决UI界面卡死问题异步任务队列按顺序执行封装任务队列Task执行任...
    99+
    2024-04-02
  • Java并行执行任务的方案有哪些
    本篇内容介绍了“Java并行执行任务的方案有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景最近在排查生产环境问题,发现商品详情接口时...
    99+
    2023-06-25
  • SpringBoot异步任务及并行事务实现
            上一篇介绍了原生Java如何实现串行/并行任务,主要使用了线程池 + Future + CountDownLatch,让主线程等待子线程返回后再向下进行。而在SpringBoot中,利用@Async和AOP对异步任务提供了更...
    99+
    2023-09-05
    java spring boot mysql
  • .Net使用Cancellation Framework取消并行任务
    在.net 4.0中,引入了一个新的类CancellationToken,这个类基本上集成了我们各种常用的取消方式,在并发任务中非常有用。 同步模式下的取消: 一种比较常见的需要支持...
    99+
    2024-04-02
  • Pandas中MultiIndex选择并提取任何行和列
    目录选择并提取带有loc的任何行或列特殊切片规范:slice(),pd.IndexSlice []xs方法给选择赋值使用多索引(分层索引)可以方便地对pandas.DataFrame...
    99+
    2023-02-23
    Pandas MultiIndex提取行列 Pandas 提取行列
  • Java并行执行任务的几种方案小结
    目录背景改进方案注意点和区别java并行执行任务demo背景 最近在排查生产环境问题,发现商品详情接口时不时会报RPC调用超时,检查代码发现接口里面查询活动耗时比较长,都是串行执行的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作