1
我必須刪除鎖對象從Parallel.ForEach
。我應該使用ConcurrentBag
還是隻刪除它?沒有鎖對象是否線程安全?這些列表在Parallel.For中是否安全線程?
results
是List<>
。
Parallel.ForEach(entityList, options,
() =>
{
List<Customer> childrenResult = new List<Customer>();
return childrenResult;
},
(childrenObject, loopState, childrenResult) =>
{
childrenResult.AddRange(currentChildrenManager.Prepare(childrenObject, currentAnalyticalDataHolder,() => loopState.IsStopped, out childrenAllData));
return childrenResult;
},
(childrenResult) =>
{
lock (lockingObject)
{
if (childrenResult == null)
results.AddRange(new List<Customer>());
else if (currentChildrenManager.RowOrFilteredRowLimitation == null)
results.AddRange(childrenResult);
else
{
int leftCount = currentChildrenManager.RowOrFilteredRowLimitation.GetRelativRowLimitation(provider.IsForGenerationTime) - results.Count();
if (leftCount > 0)
{
if (childrenResult.Count() > leftCount)
{
tAllData = currentChildrenManager.OnlyFirst;
results.AddRange(childrenResult.Take(leftCount));
}
else
results.AddRange(childrenResult);
}
else
{
tAllData = currentChildrenManager.OnlyFirst;
}
}
}
});