名称 |
说明 |
ParallelLoopState.Stop() |
退出循环的方法,这种方式要比其他两种方法更快。这个方法通知循环不要再启动执行新的迭代,并尽可能快的推出循环;表示Parallel.For的执行立刻停止,无论其他执行单元是否达到停止的条件 |
ParallelLoopState.IsStopped |
属性可用来判定其他迭代是否调用了 Stop 方法 |
ParallelLoopState.Break() |
通知循环继续执行本元素前的迭代,但不执行本元素之后的迭代;表示满足条件的当前执行单元立刻停止本次循环,其他循环仍要执行 |
Break不是Continue |
不要搞混了!Break是执行完现有的迭代后跳出 |
return |
return语句是必须的 |
代码
Parallel.ForEach(list,new ParallelOptions(){ MaxDegreeOfParallelism=2}, (p, state1) =>
{
Invoke(p);
state1.Break();//Break用于根据条件过滤循环,Break不是Continue,不要搞混了!Break是执行完现有的迭代后跳出!
state1.Stop();//Stop方法用于退出Paraller循环,表示立刻退循环,cease=终止
return; //注意:不论是Break还是Stop方法,后面的return语句是必须的,否则当前循环体第13行的语句还是会被执行。
});
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(elements, (element, ParallelLoopState) =>
{
if (element == "")
{
ParallelLoopState.Break();
return;
}
});