読者です 読者をやめる 読者になる 読者になる

Parallel.Forの2重ループから脱出

C#

通常の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);
    }
});