我有一个列表,每隔一段时间就清除一次.代码完全如下: VisitorAgent[] toPersist;ListVisitorAgent v = (ListVisitorAgent)state;lock (v){ toPersist = v.ToArray(); v.Clear();}//further processing of toPersist objects 今天我
VisitorAgent[] toPersist; List<VisitorAgent> v = (List<VisitorAgent>)state; lock (v) { toPersist = v.ToArray(); v.Clear(); } //further processing of toPersist objects
今天我得到了一个Argument异常,除非有内存问题,否则对我没有意义.但如果是这样的话,为什么不是OOM例外呢?调用ToArray()时可能导致此异常的原因是什么?
System.ArgumentException: Destination array was not long enough. Check destIndex and length, and the array's lower bounds.
我正在使用.NET 3.5& C#.
这只是尖叫竞争条件(锁定声明是第一个线索).我猜其他一些代码(在另一个线程中)已添加到List< T>在它分配目标数组之后但在它复制它之前.
我要做的第一件事是仔细检查每个可能的状态列表访问是否正确包装在一个锁定语句中.