【问题标题】:Extension methods on System.Collections.Concurrent collections are thread-safe?System.Collections.Concurrent 集合上的扩展方法是线程安全的吗?
【发布时间】:2012-05-09 09:53:18
【问题描述】:

有几个扩展方法,例如 ConcurrentDictionary 类,因为它实现了 IEnumerable 接口。这些方法(例如 First、Sum、Take 等)是否本质上是线程安全的?

【问题讨论】:

    标签: .net extension-methods concurrentdictionary


    【解决方案1】:

    扩展方法不会添加或删除任何线程安全。但是您不能真正忽略迭代集合永远不是线程安全的,无论您是显式执行它还是让 Linq 执行它。您必须确保没有其他线程可以同时修改该集合。

    请注意,由于其延迟执行行为,这在 Linq 中特别棘手。

    【讨论】:

      【解决方案2】:

      Linq-To-Objects 扩展方法在System.Linq.Enumerable 上实现为静态方法,MSDN 声明它们都是线程安全的:

      此类型的任何public static(Visual Basic 中为Shared)成员都是 线程安全

      如果您将它们与线程安全参数 (which ConcurrentDictionary is) 一起使用,则应该没有任何问题。

      【讨论】:

        【解决方案3】:

        现在您可以使用 .Net 4.0 中引入的线程安全的高级并发集合。 这真是一个很棒的概念。 无需管理锁或任何东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-02
          • 1970-01-01
          • 1970-01-01
          • 2013-12-23
          • 2014-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多