MSDN上关于ConcurrentBag的描述不清楚:
Bag适用于存储对象,当顺序无关紧要时,与集合不同,Bag支持重复项。ConcurrentBag是一种线程安全的Bag实现,针对同一线程既会生产又会消费存储在Bag中的数据的场景进行了优化。
我的问题是它是否线程安全,以及在Parallel.ForEach中使用ConcurrentBag是否是一个好的做法。
例如:
private List<XYZ> MyMethod(List<MyData> myData)
{
var data = new ConcurrentBag<XYZ>();
Parallel.ForEach(myData, item =>
{
// Some data manipulation
data.Add(new XYZ(/* constructor parameters */);
});
return data.ToList();
}
这样我就不必在使用普通列表的Parallel.ForEach中使用同步锁。
非常感谢。