私たちのソリューションでは、要因に応じてシリアルまたはパラレルで実行できる特定のループの周りにパターンを構築したいと考えています。以下はその一般的な形です。.netパラレルとシリアルのループ
コンカレントコレクションは通常のコレクションと共通のインターフェイスを共有しないため、一般的なコードを記述するにはある種のアダプタが必要です。
具体的には、ループ本体のaddFunc
デリゲートの使用について、私たちが見逃す可能性のある長期的な問題を引き起こすものがありますか?それは今のところうまくいくが、....?
Action<SomeType> addFunc;
if(runInParallel)
{
addFunc = concurrentBag.Add;
loopDelegate = Parallel.ForEach;
}
else
{
addFunc = iList.Add;
loopDelegate = Serial.ForEach; // wrapper delegate for foreach
}
loopDelegate(source, item =>
{
SomeType result = longRunningTask(item);
...
addFunc(result); // will this
});
でそれはDegreeOfParallelism(シリアル用== 1)先端のためのTA、クリーナー、あまりにも、必ず –
でより簡単かもしれないと同じように、あなたはそれを呼び出すことができることを意味します。 – jasper
@Henk Holterman:良いアイデア、連続して実行する代替メカニズムを構築する必要はありません。 – Tudor