iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#中Parallel类For、ForEach和Invoke使用介绍
  • 760
分享到

C#中Parallel类For、ForEach和Invoke使用介绍

2024-04-02 19:04:59 760人浏览 独家记忆
摘要

一、简介: Parallel类提供了数据和任务的并行性;Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并

一、简介:

Parallel类提供了数据和任务的并行性;
Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并行运行迭代,迭代的顺序没有定义。在For()方法中,前两个参数是固定的,这两个参数定义了循环的开头和结束。首先描述它的第一个方法For(int,int,Action<int>),前面两个参数代表循环的开头和介绍,第三个参数是个委托,整数参数是循环的迭代次数,该参数被传递给委托引用的方法。Paraller.For()方法的返回类型是ParallelLoopResult结构,它提供了循环是否结束的信息和最低迭代的索引(返回一个表示从中调用 Break 语句的最低迭代的整数)。

二、Paraller.For(int,int,Action<int>):

代码演示:

    public static void Test()
    {
        ParallelLoopResult result = Parallel.For(0, 10, i =>
        {
            Console.WriteLine("迭代次數:{0},任務ID:{1},線程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(10);
        });
        Console.WriteLine("是否完成:{0}", result.IsCompleted);
        Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
    }

运行结果:

三、Paraller.For(int,int,Action<int,ParallelLoopState>):

可以看到,上面委托方法运行了10次,顺序也是不能被保证的。但是最低迭代并没有数据出来,这是因为他是返回调用 Break 语句的最低迭代的整数,在这我们并没有break。如果需要才执行过程中提前中断For()方法,就可以使用ParallelLoopState来实现,For(int,int,Action<int,ParallelLoopState>)。

代码演示:

        public static void Test()
        {
            ParallelLoopResult result = Parallel.For(0, 10, (i, state) =>
            {
                Console.WriteLine("迭代次數:{0},任務ID:{1},線程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(10);
                if (i > 5)
                    state.Break();
            });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
        }

运行结果:

四、Parallel.ForEach()

Paraller.ForEach()方法遍历实现了IEnumerable的集合,其方法类似于 foreach的语句,但以异步方式遍历,这里也没有确定遍历顺序。首先描述它的第一个方法,Paraller.ForEach<TSource>(IEnumerable<TSource>,Action<TSource>),先看下例子:

代码演示:

        public static void Test()
        {
            string[] data = { "str1", "str2", "str3" };
            ParallelLoopResult result = Parallel.ForEach<string>(data, str =>
            {
                Console.WriteLine(str);
            });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
        }

运行结果:

五、Parallel.ForEach<TSource>

它也可以像For一样传入迭代次数和ParallelLoopState的,方法是ForEach<TSource>(IEnumerable<TSource> source, Action<TSource, ParallelLoopState, long> body)

代码演示:

        public static void Test()
        {
            string[] data = { "str1", "str2", "str3", "str4", "str5" };
            ParallelLoopResult result = Parallel.ForEach<string>(data, (str, state, i) =>
            {
                Console.WriteLine("迭代次數:{0},{1}", i, str);
                if (i > 3)
                    state.Break();
            });
            Console.WriteLine("是否完成:{0}", result.IsCompleted);
            Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
        }

运行结果:

六、Parallel.Invoke()

Parallel.Invoke()方法,它提供了任务并行性模式。Paraller.Invoke()方法允许传递一个Action委托数组,在其中可以指定应运行的方法,看下面的例子:

代码演示:

        public static void Test()
        {
            Parallel.Invoke(() =>
            {
                Thread.Sleep(100);
                Console.WriteLine("method1");
            }, () =>
            {
                Thread.Sleep(10);
                Console.WriteLine("method2");
            });
        }

运行结果:

七、总结

Parallel.For()和Paraller.ForEach()方法在每次迭代中调用相同的代码,而Parallel.Invoke()方法允许同时调用不同的方法。Parallel.ForEach()用于数据并行性,Parallel.Invoke()用于任务并行性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#中Parallel类For、ForEach和Invoke使用介绍

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

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

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

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

下载Word文档
猜你喜欢
  • C#中Parallel类For、ForEach和Invoke使用介绍
    一、简介: Parallel类提供了数据和任务的并行性;Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并...
    99+
    2024-04-02
  • C#中Dispose和Finalize方法使用介绍
    一、前言 在C#中,由于有了垃圾回收机制的支持,对象的析构和以前的C++有了很大的不同,这就要求程序员在设计类型的时候,充分理解.NET的机制,明确怎样利用Dispose方法和Fin...
    99+
    2024-04-02
  • C# FileStream简单介绍和使用
    FileStream 是 C# 中用于操作文件的类,它提供了一种以字节为单位读取和写入文件的功能。使用 FileStream,可以实...
    99+
    2023-08-08
    C#
  • C++逐步介绍日期类的使用
    目录头文件详细步骤第一步第二步总代码我们今天实现一个简单的计算日期 我们这里先给出头文件,后面一个一个解释 头文件 #pragma once #include<iostrea...
    99+
    2024-04-02
  • BeanUtils工具类的介绍和使用
    BeanUtils是Apache Commons BeanUtils库中的一个工具类,用于简化JavaBean之间的属性复制。它提供...
    99+
    2023-09-21
    BeanUtils
  • C++List链表的介绍和使用
    目录1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity...
    99+
    2023-03-07
    C++ List链表 C++ List使用
  • C语言make和Makefile介绍及使用
    1:make和Makefile的介绍: 概念 在软件的工程中的源文件是不计其数的,其按照类型,功能,模块分别放在若干个目录中,哪些文件需要编译,那些文件需要后编译,那些文件需要重新编...
    99+
    2024-04-02
  • C/C++中虚基类详解及其作用介绍
    目录概述多重继承的问题虚基类初始化例子总结概述 虚基类 (virtual base class) 是用关键字 virtual 声明继承的父类. 多重继承的问题 N 类: cla...
    99+
    2024-04-02
  • C/C++中抽象类详解及其作用介绍
    目录概述抽象类 vs 具体类案例抽象类的作用总结概述 抽象类 (abstract class), 是一些不用来定义对象, 而只作为基类被继承的类. 由于抽象类常用作基类, 所以通常称...
    99+
    2024-04-02
  • C语言中static的使用介绍
    目录1.static 可以修饰局部变量2. static 可以修饰全局变量3.static 可以修饰函数总结1.static 可以修饰局部变量 首先让我看看这段代码 #inclu...
    99+
    2024-04-02
  • Go中Sync.Cond的介绍和使用
    本篇内容介绍了“Go中Sync.Cond的介绍和使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 程序中的通信方式GO语言中有句名言:...
    99+
    2023-06-15
  • C++中引用和const关键字介绍
    目录引用常引用const关键字用法1)定义常量2)定义常量指针3)定义常引用总结引用 下面的写法定义了一个引用,并将其初始化为引用某个变量。类型名 & 引用名 = 某变量名;...
    99+
    2024-04-02
  • 【脚本】python中wmi介绍和使用
    一:WMI基础知识===================================================================WMI 最初于1998年作为一个附加组件与 Windows NT 4.0 Servic...
    99+
    2023-01-31
    脚本 python wmi
  • SpringBootEntity中枚举类型详细使用介绍
    目录简介方案对比枚举用法示例建表EntityEnumControllerServiceMapper测试1.正常操作2.前端传空字符串3.前端传null简介方案对比 本处列举表示类型或...
    99+
    2022-11-13
    SpringBoot Entity SpringBoot Entity枚举
  • js中值类型和引用类型的区别介绍
    1.JavaScript中的变量类型有哪些? (1)值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null ...
    99+
    2024-04-02
  • C++中declspec(dllexport)和declspec(dllimport) 的用法介绍
    一、创建动态文件 1.添加头文件dll.h,并输入以下代码: #ifdef DLL_EXPORTS //如果在工程里已经添加预定义宏DL...
    99+
    2024-04-02
  • C语言中数组的介绍及使用
    这篇文章主要讲解了“C语言中数组的介绍及使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中数组的介绍及使用”吧!目录数组一维数组初始化使用总结:内存存储二维数组创建初始化数组越界问题...
    99+
    2023-06-20
  • C++中cout的格式使用详细介绍
    1.cout和i/i++/++i的组合使用 i++ 和 ++i 是有着不同的含义,和 cout 组合使用也会得到不同的结果,下面给出一段代码: #include <iost...
    99+
    2024-04-02
  • C/C++中数据类型转换详解及其作用介绍
    目录概述不同类型数据间的转换隐式类型转换强制类型转换自己声明的类型转换转换构造函数类型转换函数案例应用概述 在日常的开发中, 我们经常会用到数据类型转换, 所以我们要对数据类型转换有...
    99+
    2024-04-02
  • Array数组对象中的forEach、map、filter及reduce的参数介绍和用法
    本篇内容介绍了“Array数组对象中的forEach、map、filter及reduce的参数介绍和用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作