为什么SynchronizedCollection <T>没有锁定IEnumerable.GetEnumerator()

Dee*_*pak 5 c#-3.0

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

  IEnumerator IEnumerable.GetEnumerator()
    {
        return this.items.GetEnumerator();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Ano*_*on. 1

无论如何,在某人使用迭代器时修改集合是一种并发冲突。

您的替代方案是什么?获取迭代器时锁定集合,直到迭代器被销毁才解锁?