名称 说明
ParallelLoopState.Stop() 退出循环的方法,这种方式要比其他两种方法更快。这个方法通知循环不要再启动执行新的迭代,并尽可能快的推出循环;表示Parallel.For的执行立刻停止,无论其他执行单元是否达到停止的条件
ParallelLoopState.IsStopped 属性可用来判定其他迭代是否调用了 Stop 方法
ParallelLoopState.Break() 通知循环继续执行本元素前的迭代,但不执行本元素之后的迭代;表示满足条件的当前执行单元立刻停止本次循环,其他循环仍要执行
Break不是Continue 不要搞混了!Break是执行完现有的迭代后跳出
return return语句是必须的

代码

  1. Parallel.ForEach(list,new ParallelOptions(){ MaxDegreeOfParallelism=2}, (p, state1) =>
  2. {
  3. Invoke(p);
  4. state1.Break();//Break用于根据条件过滤循环,Break不是Continue,不要搞混了!Break是执行完现有的迭代后跳出!
  5. state1.Stop();//Stop方法用于退出Paraller循环,表示立刻退循环,cease=终止
  6. return; //注意:不论是Break还是Stop方法,后面的return语句是必须的,否则当前循环体第13行的语句还是会被执行。
  7. });
  1. Parallel.For(1, 100, (i, ParallelLoopState) =>
  2. {
  3. // 当某一个循环单元的数大于30,
  4. // 则跳出当前执行单元,等待其他执行单元结束
  5. // 所有执行单元结束后退出Parallel.For的执行
  6. if (i > 30)
  7. {
  8. // 跳出当前执行单元
  9. ParallelLoopState.Break();
  10. return;
  11. //不加return,可能会发生该进程资源未释放。
  12. }
  13. });
  14. Parallel.For(1, 100, (i, ParallelLoopState) =>
  15. {
  16. // 当某一个循环单元的数大于30,
  17. // 则停止Parallel.For的执行
  18. if ( i > 30)
  19. {
  20. // 停止并退出Parallel.For
  21. ParallelLoopState.Stop();
  22. return;
  23. }
  24. });
  25. Parallel.ForEach(elements, (element, ParallelLoopState) =>
  26. {
  27. if (element == "")
  28. {
  29. ParallelLoopState.Break();
  30. return;
  31. }
  32. });