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