none
ConcurrentDictionary 字典值不唯一。重大bug

    问题

  • 在使用

    ConcurrentDictionary 进,我一边向字典里插入数据及更新数据,一边遍历字典,对值进行检查。

    结果发现,一个键可以对应多个值。

    如下图所示。

    Reset()方法用来插入或更新字典。类外部调用。注释中方法也试过。data.sn测试只用一个字符串。

    在下面的InitTask中遍历发现。取出的CheckState在同时触发两次Reset()方法时,可以取出两个CheckState的实例

    那么,我应该怎么避免多个值的情况。

    2017年3月9日 10:51

全部回复

  • 插入时要做lock处理

    private static object _lock=new object();

    插入时

    lock(_lock)

    {

       dictionary.Add();

    }


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年3月10日 0:21
  • 试过了。如果使用Dictionary会报异常。

    使用concurrentdictionary不会报异常。但即使在lock的情况下也会有多个值。网上搜索 getoradd不是线程安全的。

    今天测试解决方法是否可行。

    2017年3月10日 0:59
  • 最终解决了。问题在于 OfficeLineCheck中data.sn被两个设备使用了。造成冲突。现在在ReSet方法里加了一个queue队列。以保证输入数据的顺序唯一性。
    2017年3月10日 6:29
  • Hi,

    感谢你在MSDN论坛发帖。

    根据你的描述,你的问题已经被解决,请及时标记有用的回复作为答案,这样会帮助遇到相同问题的人。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年3月16日 2:33
    版主