静态字典需要线程安全 - 建议?

时间:2013-02-19 18:17:46

标签: c#

我目前在班上有一个静态字典。虽然我已经在这本字典上实现了锁,但是我收到了以下错误。

An InvalidOperationException has occurred. It reports a "collection was modified" error 

这样做的原因是,有时一种方法是使用foreach读取字典,而另一种方法正在删除或添加项目。我读到了添加

lock ( (  (IDictionary<string,string>)dict_object).SyncRoot )

关于所有正在进行读/写/删除的操作将解决问题,但我继续收到消息

does not contain a definition of SyncRoot are you missing a using directive

有关如何解决此问题的任何建议?关于如何使我的静态字典线程安全的任何其他方式?我正在使用.Net 4.0

1 个答案:

答案 0 :(得分:10)

简单:使用ConcurrentDictionary类而不是Dictionary。它是.NET 4.0中提供的线程安全字典实现。

http://msdn.microsoft.com/en-us/library/dd287191(v=vs.100).aspx

您的错误原因是SyncRoot接口中定义了ICollection,并在explicitly类中实现了Dictionary。因此,要访问它,您需要将实例强制转换为ICollection

((ICollection)dict_object).SyncRoot