ソリューション内の特定のループの周りにパターンを構築して、要因に応じてそれらをシリアルまたはパラレルで実行できるようにします。以下はその一般的な形式です。
並行コレクションは通常のコレクションと共通のインターフェースを共有しないため、一般的なコードを作成するには、ある種のアダプターが必要です。
特にループ本体でのデリゲートの使用に関して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
});