zoukankan      html  css  js  c++  java
  • 用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 ( 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<string> ( 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 );
                    }
                    );
  • 相关阅读:
    UVM系统验证基础知识0(Questasim搭建第一个UVM环境)
    DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
    正则表达式的基本用法
    Veloce2 Emulator
    Perl入门
    哪一种验证方法最好?形式验证、硬件加速还是动态仿真?
    什么是形式验证?
    穆里尼奥之皮洛斯式胜利
    穆帅:孟菲斯是计划中重要的一部分
    CentOS Netstat命令
  • 原文地址:https://www.cnblogs.com/xiaoyu5062/p/2583884.html
Copyright © 2011-2022 走看看