为什么SynchronizedCollection<T>IEnumerable.GetEnumerator()的显式实现中未获得对SyncObj的锁定

  IEnumerator IEnumerable.GetEnumerator()
    {
        return this.items.GetEnumerator();
    }

隐式实现确实获得了SyncOb的锁(由反射器验证)。

在此集合的foreach循环期间可能会出现问题。一个线程可能已获取锁,而另一个线程可能会尝试使用foreach读取它?

最佳答案

因为类无法知道何时使用迭代器完成了客户端代码。这是System.Collection类上的MSDN Library文档始终警告迭代集合不是线程安全的原因之一。

尽管他们似乎忘记了在SynchronizedCollection的文章中提及这一点。具有讽刺意味的...

关于c#-3.0 - 为什么SynchronizedCollection <T>不会在IEnumerable.GetEnumerator()上锁定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1918061/

10-09 06:03