【发布时间】:2011-07-08 20:09:33
【问题描述】:
MSDN上对ConcurrentBag的描述不清楚:
当订购无关紧要时,包对于存储物品很有用,而且与集合不同,包支持重复。 ConcurrentBag 是一个线程安全的包实现,针对同一线程将同时生产和使用包中存储的数据的场景进行了优化。
我的问题是它是线程安全的,如果这是在 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 中使用同步锁定。
非常感谢。
【问题讨论】:
标签: multithreading c#-4.0 .net-4.0 concurrency thread-safety