zoukankan      html  css  js  c++  java
  • C#多线程之Parallel中 类似于for的continue,break的方法

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

    利用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             });
  • 相关阅读:
    Java Gradle
    C/C++ C++11新特性
    C/C++ C++11原子类型和内存序
    基于流的编程(Flow-Based Programming)
    算法和数据结构 筛法求素数
    数据库 悲观锁和乐观锁
    数据库 事务隔离级别
    Serverless 的 AI 写诗,程序员浪漫起来谁能顶得住啊!
    亮点前瞻 | 首届 ServerlesssDays · China 大会议程发布
    腾讯云云函数 SCF Node.js Runtime 最佳实践
  • 原文地址:https://www.cnblogs.com/WMTcore/p/3913066.html
Copyright © 2011-2022 走看看