【发布时间】:2012-03-12 06:17:48
【问题描述】:
我知道在迭代集合时我不能修改它。
通常我会复制我想要迭代的集合,然后迭代副本以避免错误。
我的程序;但是,对我要复制的集合进行了大量快速修改。
是否会因为我在修改父集合时制作副本而发生错误?
我知道 ConcurrentDictionary 为跨线程提供了某种锁定机制。我可以使用类似的方法来防止此错误吗?
// Original collection:
Dictionary<string, Enemy> Dict_Enemies = new Dictionary<string, Enemy>();
// Copy of original collection: (this line throws the exception)
Dictionary<string, Enemy> Dict_Enemies_Copy = new Dictionary<string, Enemy>(Dict_Enemies);
【问题讨论】:
-
为什么不使用ConcurrentDictionary 代替
Dict_Enemies? -
当我使用 ConcurrentDictionary 时,我的程序似乎只是挂在通常会引发异常的地方。也许我在其他地方有问题。
-
您可以使用ConcurrentDictionary.ToArray() 方法以线程安全的方式对其进行复制。看看我的回答。
标签: c# exception collections dictionary