.NET Dictionary:只枚举线程安全吗?

4 .net multithreading dictionary thread-safety

简单地从多个线程枚举一个.NET字典是否安全?

根本没有修改词典.

Kon*_*lph 10

是的,在这种情况下,枚举是线程安全的,因为在foreach循环开始时,使用隐式调用创建枚举器的新实例GetEnumerator.


bru*_*nde 9

是的......差不多:

字典<(Of <(TKey,TValue>)>)可以同时支持多个读者,只要不修改集合即可.即便如此,通过集合枚举本质上不是一个线程安全的过程.在枚举与写访问争用的极少数情况下,必须在整个枚举期间锁定该集合.要允许多个线程访问集合以进行读写,您必须实现自己的同步.

(参考)

  • 这不回答这个问题.引用的文本并不意味着纯读字典(就像这里的情况)不是线程安全的,因此"几乎"是误导性的. (2认同)
  • 该文档参考的第一句回答了问题,但文档引用中的最后两句适用于"阅读和写作".结合你的模糊"井几乎",对于被问到的问题,这个令人困惑,最终会产生误导性的答案.没有任何修改的读取是线程安全的.故事结局.你提供的大部分东西都让水变得混乱. (2认同)