Task Parallel Library (TPL) で Parallel を中断するには3つの方法があります。
1つ目は Exception を throw すること、 2つ目は ParallelLoopState クラスの Break メソッドを実行しそれ以上のインデックスが必要ないと宣言すること、3つ目は ParallelLoopState クラスの Stop メソッドを実行ししかかり以外の実行を停止することです。
そして、他の Parallel の実行中にその状態を確認するのが、ParallelLoopState クラスの ShouldExitCurrentIteration プロパティです、個別に IsExceptional や IsStopped や LowestBreakIteration でも確認できます。
尚、Exception を throw すると、 throw された Exception は、全体でまとめられて AggregateException として throw されます、AggregateException の InnerExceptions に全ての Exception は格納されます。
try
{
Parallel.For(1, 100000, (i, loopState) => {
// if (i == 20) throw new Exception(“例外");
// if (i == 20) loopState.Break();
if (i == 20) loopState.Stop();
if (loopState.ShouldExitCurrentIteration) return;
Console.WriteLine(i);
});
}
catch (AggregateException e) {
Console.WriteLine(e);
}