C#字典添加项报错“索引超出了数组界限”,是M$的BUG吗? NO! 前人傻逼!

作者:V君 发布于:2018-11-16 11:29 Friday 分类:填坑经验

TL;DR: 给我用并发字典,如果是3.5及以下,就锁起来! 

依旧是陈年老项目,最近开始发现有大面积丢数据的情况,在日志看到大片的索引越界异常. 

Exception: 索引超出了数组界限。
 在 System.Collections.Generic.Dictionary`2.Insert(TKey , TValue , Boolean )
 在 System.Collections.Generic.Dictionary`2.Add(TKey , TValue )

乍一看,还以为是M$的BUG,从系统库内部爆出来的非预期异常.

按预期,字典能爆的异常应该只有重复key.

在阅读代码之前先用关键字喂狗,吐出爆栈,看到竟态现象.
而且,字典的状态一旦坏掉就会一直坏下去...

开始阅读代码,果然 -- 字典添加和移除操作在不同线程,且未加锁 -- 3.5没有并发字典

简单加锁发布修复版本交差.



标签: 软件开发 C#

引用地址:

发表评论:

Powered by emlog 去你妹的备案 sitemap