通常のforであれば、このような場合にはgotoが未だに健在です。しかし、以下のコードは、まあいかにもダメそうですがやはりコンパイルできません。delegateを作った時点ではラベルが認識されていないようです。
Parallel.For(0, 20, delegate(int i) { for (int j = 0; j < 20; j++) { if (i > 10 && j > 10) { goto END; } Console.WriteLine("i:{0} j:{1}", i, j); } }); END: ;
Parallel.Forに渡すdelegateをParallelState付きのものに切り替えれば、(できるだけ早く)脱出することができます。
Parallel.For(0, 20, delegate(int i, ParallelState state) { for (int j = 0; j < 20; j++) { if (i > 10 && j > 10) { state.Stop(); break; } Console.WriteLine("i:{0} j:{1}", i, j); } });