我很难理解 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 已经中止了整个 for 操作,因为它们的起始数字大于中断数字 10。
关于c# - Stop vs Break in Parallel.For,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261663/