我很难理解loopState.Stop()
和loopState.Break()
。我已经阅读了MSDN和有关它的几篇文章,但我仍然感到困惑。
我了解的是,每个迭代分区程序都会为要处理的线程提供剩余索引,并且loopState.Stop()
停止所有线程,而loopState.Break()
停止当前线程。
但是,请考虑以下情况:
Parallel.For(0, 100, (i, loopState) =>
{
if (i >= 10)
loopState.Break();
Debug.Write(i);
});
对于此循环,我得到以下结果:
0 25 1 2 3 4 5 6 7 8 9 10
我不知道为什么结果中会有10和25个数字。
有人可以帮忙吗?
附言我有i5 520M CPU(2核心=> 4线程)
最佳答案
loopState.Break()
不会像return
那样破坏功能。因此,loopState.Break()
之后的行仍将执行。该数字的作用域结束后,for
检查是否已调用loopState.Break()
。如果是这样,则允许所有循环继续进行,直到达到称为Break
的数字为止。
在您的示例中,0到24的循环将与25到49的循环同时中断(并显示其“中断”数字)。
循环50..74和75..99甚至不会启动,因为第二个循环25..49已经中止了整个操作,因为它们的起始编号大于中断编号10。