Я сталкивался с этим примером, когда узнал о ParallelLoopState:
Parallel.For(0, 10, (int i, ParallelLoopState loopState) =>
{
if (i == 5)
{
Console.WriteLine("Breaking loop");
loopState.Break();
Console.WriteLine("LowestBreakIteration = " +
loopState.LowestBreakIteration);
}
Thread.Sleep(1000);
Console.WriteLine("i= " + i);
});
Возможный результат этого:
i= 6
i= 4
i= 0
Breaking loop
LowestBreakIteration = 5
i= 2
i= 8
i= 1
i= 3
i= 7
i= 5
Очевидно, что каждый раз, когда приложение запускается, разныерезультат сформирован.Как может быть так, что «LowestBreakIteration = 5» и «i = 5» разделены другими значениями i?Я думал, что после выполнения if (i==5)
он переходит непосредственно к следующей итерации, не записывая в консоли i = 5 (последняя строка кода: Console.WriteLine("i= " + i);
).Согласно книге: «Перерыв гарантирует, что все выполняющиеся в настоящее время итерации будут завершены»