J'ai un dictionnaire trié, qui stocke certaines données. Toutes les deux minutes environ, je fais ce qui suit:.ToList exception de lancement
sorteddcitionary.Values.ToList() ----> Cette ligne jette parfois une exception. Ce n'est pas cohérent. L'exception est la suivante:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at System.Collections.Generic.SortedDictionary`2.ValueCollection.<>c__DisplayClass11.CopyTo>b__10(Node node)
at System.Collections.Generic.TreeSet`1.InOrderTreeWalk(TreeWalkAction`1 action)
at System.Collections.Generic.SortedDictionary`2.ValueCollection.CopyTo(TValue[] array, Int32 index)
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Aditi.BMCMUtility.UnModCacheMaster.MessageAddition(PrivateMessage message, Nullable`1 cnt)
Une idée de la raison pour laquelle cette exception provient du code .NET LINQ?
Il est dans un verrou. Je poste l'extrait de code. (Ceci est après la réponse de bzlm.)
try
{
lock (locker)
{
MessageCache.Add(message.MessageID, message);
privMsgList = MessageCache.Values.ToList(); /// Line which throws exception
while (MessageCache.Count > cnt.Value)
{
MessageCache.Remove((MessageCache.First().Key));
}
}
}
catch(Exception ex)
{}
Non, c'est dans un verrou. J'ai mis à jour ma question après avoir vu votre réponse. – Prashant
Veuillez montrer comment 'locker' est défini. En outre, mon souci était que le code * ailleurs * modifie 'MessageCache'; n'y a-t-il aucun risque de cela? – bzlm