我有一个经常被清除的列表。代码完全是这样的:
VisitorAgent[] toPersist;
List<VisitorAgent> v = (List<VisitorAgent>)state;
lock (v)
{
toPersist = v.ToArray();
v.Clear();
}
//further processing of toPersist objects
今天我刚刚得到一个参数异常,除非存在内存问题,否则这对我来说没有意义。但如果是这样的话,为什么不出现 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
陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)