C#多线程之Parallel中 类似于for的continue,break的方法_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#多线程之Parallel中 类似于for的continue,break的方法

C#多线程之Parallel中 类似于for的continue,break的方法

 2014/8/14 19:36:40  WMTcore  程序员俱乐部  我要评论(0)
  • 摘要:好久没写东西了,终于找到点知识记录下。。。利用ParallelLoopState对象来控制Parallel.For函数的执行,ParallelLoopState对象是由运行时在后台创建的:Parallel.For(1,100,(i,ParallelLoopState)=>{...});这个对象有两个函数,Stop和Break,可以分别用来控制Parallel.For的执行。调用Stop,表示Parallel.For的执行立刻停止,无论其他执行单元是否达到停止的条件
  • 标签:C# 方法 for 多线程 all break continue 线程

  好久没写东西了,终于找到点知识记录下。。。

利用ParallelLoopState对象来控制Parallel.For函数的执行,ParallelLoopState对象是由运行时在后台创建的:

Parallel.For(1, 100, (i, ParallelLoopState) =>{...});

这个对象有两个函数,Stop和Break,可以分别用来控制Parallel.For的执行。

调用Stop,表示Parallel.For的执行立刻停止,无论其他执行单元是否达到停止的条件。而如果我们使用Break,则表示满足条件的当前执行单元立刻停止,而对于其他执行单元,其中满足停止条件也会通过Break停止,其他未满足停止条件的则会继续执行下去,从而全部执行完毕,自然停止。当所有执行单元停止后,Parallel.For函数才停止执行并退出。

break类似于for的continue,而stop就类似于for的break。

            Parallel.For(1, 100, (i, ParallelLoopState) =>
            {  
                // 当某一个循环单元的数大于30,
                // 则跳出当前执行单元,等待其他执行单元结束
                // 所有执行单元结束后退出Parallel.For的执行
                if (i > 30)
                {
                    // 跳出当前执行单元
                    ParallelLoopState.Break();
                    return;//不加return,可能会发生该进程资源未释放。
                }
            });
            Parallel.For(1, 100, (i, ParallelLoopState) =>
            {
                // 当某一个循环单元的数大于30,
                // 则停止Parallel.For的执行
                if ( i > 30)
                {
                    // 停止并退出Parallel.For
                    ParallelLoopState.Stop();
                    return;
                }
            });

Parallel.ForEach中ParallelLoopState对象的函数也采用相同的方式调用:

1             Parallel.ForEach(elements, (element, ParallelLoopState) =>
2             {
3                 if (element == "")
4                 {
5                     ParallelLoopState.Break();
6                     return;
7                 }
8             });

 

  • 相关文章
发表评论
用户名: 匿名