【发布时间】:2012-05-09 09:53:18
【问题描述】:
有几个扩展方法,例如 ConcurrentDictionary 类,因为它实现了 IEnumerable 接口。这些方法(例如 First、Sum、Take 等)是否本质上是线程安全的?
【问题讨论】:
标签: .net extension-methods concurrentdictionary
有几个扩展方法,例如 ConcurrentDictionary 类,因为它实现了 IEnumerable 接口。这些方法(例如 First、Sum、Take 等)是否本质上是线程安全的?
【问题讨论】:
标签: .net extension-methods concurrentdictionary
扩展方法不会添加或删除任何线程安全。但是您不能真正忽略迭代集合永远不是线程安全的,无论您是显式执行它还是让 Linq 执行它。您必须确保没有其他线程可以同时修改该集合。
请注意,由于其延迟执行行为,这在 Linq 中特别棘手。
【讨论】:
Linq-To-Objects 扩展方法在System.Linq.Enumerable 上实现为静态方法,MSDN 声明它们都是线程安全的:
此类型的任何
public static(Visual Basic 中为Shared)成员都是 线程安全
如果您将它们与线程安全参数 (which ConcurrentDictionary is) 一起使用,则应该没有任何问题。
【讨论】:
现在您可以使用 .Net 4.0 中引入的线程安全的高级并发集合。 这真是一个很棒的概念。 无需管理锁或任何东西。
【讨论】: