简单地从多个线程中枚举一个 .NET 字典是否安全?
根本没有对字典进行任何修改。
是的,在这种情况下,枚举是线程安全的,因为在foreach
循环开始时,会通过隐式调用创建枚举器的新实例GetEnumerator
。
是的......好吧几乎:
Dictionary<(Of <(TKey, TValue>)>) 可以同时支持多个读取器,只要不修改集合即可。即便如此,通过集合枚举本质上不是线程安全的过程。在枚举与写访问竞争的极少数情况下,必须在整个枚举期间锁定集合。要允许集合被多个线程访问以进行读写,您必须实现自己的同步。
(参考)