抽象线程之Parallel类
该类定义了并行的For和Foreach方法,Parallel类使用多个任务,因此需要多个线程来完成这个作业
代码及简单注释如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading;namespace ConsoleApplication1 {class Program{//Parallel.For多次调用同一个方法static public void formathod(){//函数原型:Parallel.For<TLocal>(Int32, Int32, Func<TLocal>, Func<Int32, ParallelLoopState, TLocal, TLocal>, Action<TLocal>)//定义一个本地数据为string类型的数据,执行Func<TLocal>委托对本地数据初始化,然后将每个迭代调用一次Func<Int32, ParallelLoopState, TLocal, TLocal>委托,最后执行 Action<TLocal>委托对本地状态进行最后处理Parallel.For<string>(0, 20, () =>{Console.WriteLine("Task{0} is begin", Task.CurrentId);return string.Format("Task{0}", Thread.CurrentThread.ManagedThreadId);},(i, pls, str) =>{Thread.Sleep(1000);return string.Format("Task{0}", i);},(str) =>{Console.WriteLine("{0} is over", str);});}static public void formathod1(){//函数原型:For(Int32, Int32, Action<Int32>)//以下实例则为从0迭代到10,每一次都调用Action<i>这个委托,返回参数提供了循环是否结束的消息ParallelLoopResult result =Parallel.For(0, 10, i =>{Thread.Sleep(100);Console.WriteLine("Thread{0},Task{1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId);});Console.WriteLine(result.IsCompleted);}static public void foreachmethod(){//Parallel.ForEach函数原型为:Parallel.ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)//IEnumerable<TSource>为公开枚举数,该枚举数支持在指定类型的集合上进行简单迭代。//以下代码为迭代集合上的元素,并为他们执行lambda表达式(Action<TSource>委托)string[] data = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };Parallel.ForEach<string>(data, s =>{Thread.Sleep(1000);Console.WriteLine(s);});}static void Main(string[] args){formathod1();formathod();foreachmethod();}} }
转载于:https://www.cnblogs.com/runninglzw/p/3848257.html
抽象线程之Parallel类相关推荐
- 【C#】线程之Parallel
在一些常见的编程情形中,使用任务也许能提升性能.为了简化变成,静态类System.Threading.Tasks.Parallel封装了这些常见的情形,它内部使用Task对象. Parallel.Fo ...
- JavaSE学习52:细说多线程之Thread类和Runable接口
一线程创建的两种方式比较 线程创建和启动有两种方式,这里只是列出步骤,不再进行详细解释. (1)继承Thread类 [java] view plaincopy print? class MyThrea ...
- C# 多线程之Thread类
// 摘要: // 初始化 System.Threading.Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托.//// 参数: // start:// System.Threadi ...
- java thread类_java多线程之Thread类
Class Thread java.lang.Object java.lang.Thread 实现接口:Runnable 直接被继承的子类:ForkJoinWorkerThread public cl ...
- 多线程之Thread类
Java并发编程:Thread类的使用 在前面2篇文章分别讲到了线程和进程的由来.以及如何在Java中怎么创建线程和进程.今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知 ...
- JAVA线程之Thread类详解
Thread类用于操作线程,是所以涉及到线程操作(如并发)的基础.本文将通过源码对Thread类的功能作用进行分析. 一.属性 /* Make sure registerNatives is the ...
- 异步多线程之Parallel详解
上一篇:异步多线程之入Task 下一篇:异步多线程使用中的常见问题 简介 Parallel 叫做并行编程 .Net 4.5 时代的,基于 Task 基础上做了封装.Parallel 的特点方便控制线程 ...
- linux 线程pthread_detach,linux线程之pthread_join和pthread_detach
在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死.在 被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反 ...
- [深入学习C#]C#实现多线程的方式:使用Parallel类
简介 在C#中实现多线程的另一个方式是使用Parallel类. 在.NET4中 ,另一个新增的抽象线程是Parallel类 .这个类定义了并行的for和foreach的 静态方法.在为 for和 f ...
最新文章
- 2019建中台,2020拆中台,为什么很多公司中台战略宣告“失败”?
- leetcode 599. 两个列表的最小索引总和(Minimum Index Sum of Two Lists)
- fst java_java快速序列化库FST
- xenserver 安装新硬盘_给Xenserver添加新硬盘
- 【机器学习】梯度下降原理
- mask_rcnn训练自己的数据集
- 什么是sql注入_什么是Python SQL注入?又如何使用Python防止SQL注入攻击呢?
- 在浏览器上打开swf文件时变成了下载swf文件解决方式
- 【计算机体系结构实验】指令调度和延迟分支
- 知乎高赞:无人驾驶什么时候才会凉凉,估计还要多久?
- java 异常之Cause: org.apache.ibatis.executor.ExecutorException: Executor was closed
- Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found suitable exact version “11.4“)
- kafka干货(五):kakfka的python客户端----Confluent-kafka
- matlab图片白边_matlab绘图白边设定
- 《一条狗的使命》观后感
- 5G 帧结构、物理资源与物理信道
- ios应用中添加广告
- vb.net 教程 1-12 Hashtable
- [Warning] IPv4 forwarding is disabled. Networking will not work.
- 关于B85M-V Plus支持AHCI驱动问题
热门文章
- deepin tim(wine)无法安装_浅析国产操作系统深度deepin
- 十四、MySQL函数相关知识总结(简单易懂)
- LeetCode547. Friends Circles 利用union find | bfs | dfs三种方法解决
- LeetCode 1930. 长度为 3 的不同回文子序列(计数)
- 天池 在线编程 音乐组合
- 05.序列模型 W2.自然语言处理与词嵌入
- LeetCode 1536. 排布二进制网格的最少交换次数
- LeetCode 870. 优势洗牌(贪心 二分查找)
- 查看宝塔面板账号密码命令_宝塔面板升级到最新版图文教程
- mac python安装太慢_【已解决】Mac中给pip3添加代理以提升下载python包的速度