用Parallel.For()和Parallel.For<TLocal>()方法实现并行运行迭代
Parallel类是.NET 4中新增的抽象线程类。如果你开发用的是VS2008或更低版本,那么就直接关闭吧,下面两个示例用了匿名委托,如果不知道匿名委托的语法,那么先去简单了解一下,不然很难理解示例代码。
Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Parallel.For()方法,可以并行运行迭代。迭代的顺序没有定义。
在For()方法中,前两个参数定义了循环的开头和结束。下面代码示例从0迭代到9。第三个参数是一个Action<int>委托。整数是循环的迭代次数,该参数被传递给Action<int>委托引用的方法。Parallel.For()方法的返回类型是ParallelLoopResult结构,它提供是否结束的信息。
ParallelLoopResult result = Parallel.For ( , , i =>{
Console.WriteLine ( "{0}, task: {1} , thread: {2}",i,Task.CurrentId ,Thread.CurrentThread.ManagedThreadId );
Thread.Sleep ( );
} );
Console.WriteLine ( result.IsCompleted);
在Parallel.For()的方法体中,把索引、任务标识符和纯种标识符写入控制台中。从输出可以看出,顺序是不能保证的。大家可以自行多次测试。
For()方法的泛型版本还接受3个委托参数。在下面的示例中,实现了For()的泛型方法,别看这么多,合起来就一句,分开来看比较清晰而已。
Parallel.For<string> ( , ,
( ) => {
Console.WriteLine ( "init thread {0}, task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId );
return string.Format ( "t: {0}", Thread.CurrentThread.ManagedThreadId );
},
(i,pls,str) => {
Console.WriteLine ( "body i {0} str1 {1} thread {2} task {3}",i,str,Thread.CurrentThread.ManagedThreadId ,Task.CurrentId );
return string.Format ( "i {0}", i );
},
(str1) => {
Console.WriteLine ( "finally {0}",str1 );
}
);
用Parallel.For()和Parallel.For<TLocal>()方法实现并行运行迭代的更多相关文章
- C# 使用Parallel并行开发Parallel.For、Parallel.Foreach实例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- array_reduce方法用回调函数迭代地将对数组的值进行操作
在处理php数组的时候,有一种需求特别的频繁,如下二维数组: $arr = array( 1=>array( 'id' => 5, 'name' => '张三' ), 2=>a ...
- SpringBoot thymeleaf使用方法,thymeleaf模板迭代
SpringBoot thymeleaf使用方法,thymeleaf模板迭代 SpringBoot thymeleaf 循环List.Map ============================= ...
- Parallel Programming-使用CancellationTokenSource调度并行运行的Task
本文主要介绍使用CancellationTokenSource调度并行运行的Task. 一.使用场景 有多个Task并行运行时,如果其中一个Task所运行的程序出现异常,我们想马上终止所有待执行的Ta ...
- c#如何使两个方法并行运行
static void Main(string[] args) { Parallel.Invoke(Foo, Bar); } static void ...
- 灵动标签的使用方法 ecms通过运行sql获取须要的记录
在某些条件下,我们要求站点的某页上显示指定的信息, 可是这样的指定假设固定去用代码写死的话,对以后的修改将会是大麻烦: 这时候sql语句的优势就凸显出来,利用sql语句仅仅须要改改数字,就能让显示的内 ...
- java的String构造对象的几种方法以及内存运行过程
String类创建对象的方法可以分为以下三种 1.String a = "123"; 2.String b = new String("123"); 3.Str ...
- windows下postgresql安装失败解决方法:无法运行getlocales.exe
今天要安装postgresql但是安装的时候出现错误 Unknown error while running C:\Users\jinjin\AppData\Local\Temp\postgresql ...
- [Xcode 实际操作]八、网络与多线程-(18)PerformSelector消息处理方法:由运行时系统,负责去调用对象的指定方法
目录:[Swift]Xcode实际操作 本文将演示PerformSelector消息处理方法. 在项目文件夹上点击鼠标右键弹出文件菜单. [New File]->[Swift File]-> ...
随机推荐
- C#socket编程序(二)
在上一篇中,我列了一些常用的方法,可以说这些方法是一些辅助性的方法,对于分析网络中的主机属性非常有用.在这篇中,我将会介绍一下面向连接(TCP)socket编程,其中辅以实例,代码可供下载. 对于TC ...
- 【58沈剑架构系列】RPC-client异步收发核心细节?
第一章聊了[“为什么要进行服务化,服务化究竟解决什么问题”] 第二章聊了[“微服务的服务粒度选型”] 第三章聊了[“为什么说要搞定微服务架构,先搞定RPC框架?”] 上一章聊了[“微服务架构之RPC- ...
- PyQt5调入数据库数据在表格中显示
数据库为Postgresql import sys from form import Ui_Form from PyQt5.Qt import QWidget, QApplication,QTable ...
- NHibernate 学习导航
http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html
- CentOS7多实例安装mysq5.6二进制版本
1丶下载mysql,解压,创建用户,创建软链接 test -d /tools || mkdir /tools ;cd /tools wget http://mirrors.sohu.com/mysql ...
- TypeScript的数据类型总结
全局下载:npm i typescript -g 编译.ts文件:tsc 1.ts自动生成对应js文件 基本类型: 1.布尔,数字,字符串 ts文件 //布尔类型 var a:boolean=tru ...
- 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)
Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...
- 2017-2018-1 20179202《Linux内核原理与分析》第七周作业
一 .Linux内核创建一个新进程的过程 1. 知识准备 操作系统内核三大功能是进程管理,内存管理,文件系统,最核心的是进程管理 linux 进程的状态和操作系统原理的描述进程状态有所不同,比如就绪状 ...
- pyinstaller 打包错误集锦
最近在用 pyinstaller 打包项目的时候遇到如下错误: RecursionError: maximum recursion depth exceeded 解决方案 执行 pyinstaller ...
- python 创建项目
项目骨架 nose 测试框架 Windows 10 配置 创建骨架项目目录 Windows 10 的 PowerShell mkdir projects cd projects/ mkdir skel ...