首页 > 代码库 > C#多线程之Parallel中 类似于for的continue,break的方法
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 });
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。