在ConcurrentDictionary类上有几个扩展方法,因为它实现了IEnumerable接口。这些方法(例如First,Sum,Take等)本质上是线程安全的吗?
答案 0 :(得分:3)
扩展方法不添加或删除任何线程安全性。但你无法忽视迭代一个集合永远不是线程安全的,无论你是明确地做还是让Linq这样做。您必须确保没有其他线程可以同时修改集合。
请注意,由于执行行为延迟,这在Linq中非常棘手。
答案 1 :(得分:0)
Linq-To-Objects扩展方法在System.Linq.Enumerable
上实现为静态方法,MSDN声明它们都是线程安全的:
此类型的任何
public static
(Visual Basic中的Shared
)成员都是 线程安全
如果您使用线程安全参数(which ConcurrentDictionary
is),则不应该有任何问题。
答案 2 :(得分:-1)
现在您可以使用在线程安全的.Net 4.0中引入的高级并发集合。 这真是太棒了。 无需管理锁或任何东西。