异常内容:
索引超出了数组界限
StackTrance
在System.collections.generic.dictionary.resize(int32 newsize,boolean forcenewhashcodes)
在system.collections.generic.dictionary.insert(tkey key,tvalue value,boolean add)
一般不会报这种错误 可以程序运行久了就会出错 ,我想知道报这种错误的具体引发原因是什么,然后解决办法是什么
比如数字有10个项,但你却要去取第11个项时就出这个错误
直接原因同1楼,
但是你StackTrance列出来的表示你是在对集合做插入操作,可能原因:
插入位置为12,可集合长度小于12,
改情况要么是你传进来的集合就是小于12,要么是在获取完插入位置后,集合在其他线程被修改。
例如:
(1) var dic=getdic();//只获取到11个元素 dic.insert(a,12); (2) public dic1; Thread A { index= GetIndexFromDicWhereMessIsTrue(dic1); sleep(10000); dic1.insert(a,index); } thread B { dic1.clear(); } main() { dic1=getdic(); threadA.strat(); sleep(5000); threadB.start(); }
你 谢谢 应该是这样的 后来加了lock
这个需要注意线程安全和key值唯一。请参考以下简单的线程安全代码案例。
Dictionary d = new Dictionary(); Thread1Proc() { lock(d) { d.Add(a); } } Thread2Proc() { lock(d) { d.Remove(a); } }
谢谢