Parallel.ForEachの「続行」に相当するものはありますか?


249

いくつかのコードを移植して、コードにParallel.ForEachエラーが発生しましたcontinue。私が使用できる同等のものがあるParallel.ForEachと機能的に同等continueforeachループが?

Parallel.ForEach(items, parallelOptions, item =>
{
    if (!isTrue)
        continue;
});

回答:


414
return;

(本体は各アイテムに対して呼び出される関数です)


23

ループをParallel.Foreachロジックの互換性のある定義に変換すると、ステートメントの本文がラムダになります。それは、Parallel関数によって呼び出されるアクションです。

したがって、で置き換えcontinue、orまたはステートメントでreturn中断します。Stop()Break()


1
ブレークをreturnステートメントで置き換えるよりも優れたオプションは、ParallelLoopStateのStop()およびBreak()です。 blogs.msdn.com/b/pfxteam/archive/2009/05/27/9645023.aspx
JasonCoder

@JasonCoderどれも同等ではcontinueありません。
ます

1
@正解します、それが私が休憩と言った理由です。returnステートメントはcontinueステートメントを置き換えます
JasonCoder

@JasonCoder-ああ。私はあなたが何を意味するのか誤解しました、おっと。
ます

-1

続行するには、残りのブロックをスキップして次の項目に移動することを意味します。したがって、ブロックの残りの部分に反対の条件を適用することで、continueを実装できます。

たとえば、質問のコードは次のように書き直されます。

Parallel.ForEach(items, parallelOptions, item =>
{
    //Skip an item by applying the opposite condition used for continue on all items until the end of the foreach

    if (isTrue) 
    {
      //Do what you want to do for all items
    }

});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.