博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Parallel.For()和Parallel.For<TLocal>()方法实现并行运行迭代
阅读量:5995 次
发布时间:2019-06-20

本文共 1439 字,大约阅读时间需要 4 分钟。

Parallel类是.NET 4中新增的抽象线程类。如果你开发用的是VS2008或更低版本,那么就直接关闭吧,下面两个示例用了匿名委托,如果不知道匿名委托的语法,那么先去简单了解一下,不然很难理解示例代码。

  Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Parallel.For()方法,可以并行运行迭代。迭代的顺序没有定义。

  在For()方法中,前两个参数定义了循环的开头和结束。下面代码示例从0迭代到9。第三个参数是一个Action<int>委托。整数是循环的迭代次数,该参数被传递给Action<int>委托引用的方法。Parallel.For()方法的返回类型是ParallelLoopResult结构,它提供是否结束的信息。

ParallelLoopResult result = Parallel.For ( 0, 10, i =>{               Console.WriteLine ( "{0}, task: {1} , thread: {2}",i,Task.CurrentId ,Thread.CurrentThread.ManagedThreadId );               Thread.Sleep ( 10 );            } );            Console.WriteLine ( result.IsCompleted);

  在Parallel.For()的方法体中,把索引、任务标识符和纯种标识符写入控制台中。从输出可以看出,顺序是不能保证的。大家可以自行多次测试。

  For()方法的泛型版本还接受3个委托参数。在下面的示例中,实现了For()的泛型方法,别看这么多,合起来就一句,分开来看比较清晰而已。

Parallel.For
( 0, 20, ( ) => { 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 ); } );

 

转载地址:http://ywqlx.baihongyu.com/

你可能感兴趣的文章
蓝桥杯练习系统——基础练习 十六进制转十进制
查看>>
ionic3+angular4+cordova 项目实例
查看>>
tracepath 路由跟踪命令
查看>>
(转)设计模式——观察者模式
查看>>
Jar包冲突解决方法
查看>>
彻底搞清楚Java并发 (一) 基础
查看>>
SQL疑难杂症【3】链接服务器提示"无法启动分布式事物"
查看>>
Windows Mobile和Wince(Windows Embedded CE)下如何封装Native DLL提供给.NET Compact Framework进行调用...
查看>>
数据库相关
查看>>
HDU Count the string (KMP)
查看>>
C#中的泛型
查看>>
编程之美4:求数组中的最大值和最小值
查看>>
ios7新增基础类库以及OC新特性
查看>>
[LeetCode] Maximal Square
查看>>
代码设置TSQLCONNECTION参数
查看>>
DataTable 的用法简介
查看>>
步步为营 .NET 代码重构学习笔记系列总结
查看>>
BROKER服务器同客户端和应用服务器三者之间传递消息的格式定义
查看>>
【转】20个Cydia常见错误问题解决方法汇总
查看>>
使用jQuery和Bootstrap实现多层、自适应模态窗口
查看>>