7

1000 個のランダムな整数の配列があり、たとえば 68 を見つけるためにループする必要があるとします。

クアッド コア CPU で新しい Parallel.For を使用すると、速度が大幅に向上し、各コアは 250 個の配列アイテムしか動作しません。

問題は、次の条件が満たされたときに Parallel.For ループを中断できるかどうかです。

if (integerArray[i] == 68)

   break;

ありがとう。

4

2 に答える 2

9

現在実行中の反復が完了した後に停止したい場合 (ただし、現在の前の反復は実行されます。つまり、インデックスが小さい反復 = i)

Parallel.For(0, 100, (i, s) =>
    {
        s.Break();
    });

または、現在の後に停止したい場合、これより前の反復 (インデックス = i に関して) も停止する必要があります

Parallel.For(0, 100, (i, s) =>
    {
        s.Stop();
    });

ただし、どちらの場合も、反復に時間がかかる場合は作業を中止する必要があるかどうかを確認することをお勧めします

s.ShouldExitCurrentIteration

詳細はこちらParallel.For Method (Int32, Int32, Action(Int32, ParallelLoopState))

于 2010-08-21T20:06:32.257 に答える
2

並列クエリを実行するには、並列クエリではなく、PLINQ(Parallel LINQ)を調べる必要があるように思われます。
http://msdn.microsoft.com/en-us/library/dd460688.aspx

于 2010-08-21T20:05:48.317 に答える