我很难理解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。

09-12 13:06