[英].NET ConcurrentDictionary.ToArray() ArgumentException
[英]ArgumentException when calling .ToArray()
我有一个列表,每隔一段时间就清除一次。 代码完全如下:
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#。
这只是尖叫竞争条件( lock
声明是第一个线索)。
我猜其他代码(在另一个线程中)在分配目标数组之后但在它复制之前添加到List<T>
。
我要做的第一件事是仔细检查每个可能的状态列表访问是否正确包装在一个lock
语句中。
在分配数组的时间和复制列表内容的时间之间,正在改变state
列表。 锁定v
对此没有任何影响,除非填充状态的代码知道v
(在本例中似乎不是这样)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.