簡體   English   中英

調用.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM