【问题标题】:Read/Remove items from dictionary in multi threaded environment在多线程环境中从字典中读取/删除项目
【发布时间】:2013-08-31 17:57:32
【问题描述】:

我有以下对象:

Dictionary<string, List<SubmitSm>> smDic

这是一个全局变量。

将 smDic 中的项目读取到该线程的本地对象中,然后在其他线程执行相同操作时从 smDic 中删除复制的项目有什么影响/含义?每个线程读取和删除项目只能读取具有特定字典键的项目(这是一对一的关系)

【问题讨论】:

  • 使用 ConcurrentDisctionary

标签: c# multithreading dictionary


【解决方案1】:

在这种情况下,我建议您使用System.Collections.Concurrent.ConcurrentDictionary。它还实现了IDictionary 接口,并且可以以线程安全的方式用于执行添加和删除操作。见http://msdn.microsoft.com/en-us/library/dd287191.aspx

ToDictionary 的变体可根据要求用于并发字典,不需要中间转换为 KeyValuePair,可在此处找到:Extension method Gets "No overload for method" Error

【讨论】:

  • 我使用了 ConcurrentDictionary。我需要编写一个扩展方法,以便拥有 .ToConcurrentDictionary() 功能。
  • @BossRoss 这个扩展方法的输入是什么?会不会和现在的ToDictionary扩展方式类似?
  • Here 已经回答了:-)
  • @Alex 再三考虑,最好添加该扩展方法代码作为原始问题的答案。再次从此答案中删除。
  • 我不能编辑它,因为它太短了,但是你拼错了ConcurrentDictionary(你在里面放了一个's')。
猜你喜欢
  • 2011-03-09
  • 2010-12-08
  • 2015-03-04
  • 1970-01-01
  • 2013-03-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多