我们想在我们的解决方案中围绕某些循环构建一个模式,这将允许它们根据因素串行或并行运行。下面是它的一般形式。
由于并发集合不与常规集合共享公共接口,因此我们需要某种适配器来编写通用代码。
特别是围绕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
});