Das Hinzufügen zu einem generischen Wörterbuch verursacht IndexOutOfRangeException
Ich bin mit einem dictionary innerhalb einer Aufgabe.
Logisch ich habe es so einrichten, dass mein Schlüssel nie zusammen, aber manchmal, wenn ich das hinzufügen zum Wörterbuch bekomme ich diese Exception.
Index was outside the bounds of the array.
at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at Rpc.<MapIntoRpc>b__4[T](Object x) in Rpc.cs:line 113
at System.Threading.Tasks.Task`1.InvokeFuture(Object futureAsObj)
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
Ich verstehen, es kann Parallelitätsprobleme von dem Versuch, zu entfernen oder fügen Sie die gleiche Taste mehrere Male, aber ich habe entfielen, die algorithmisch.
Was bewirkt, dass die Beurteilung manchmal nicht?
Was ist der beste Weg, um, dass die Arbeit?
InformationsquelleAutor der Frage Austin Harris | 2013-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie ausgesehen haben, die Dokumentation. Das, was es sagt:
InformationsquelleAutor der Antwort Dzienny
Dein Problem ist höchstwahrscheinlich die Synchronisierung. Wenn ein Wörterbuch Hinzugefügt wird, die es manchmal braucht, um erhöhen Sie die Größe der zugrunde liegenden Struktur (ein array). Wenn Sie das hinzufügen von mehreren threads, die möglicherweise zu einer
IndexOutOfRangeException
. Sie verwenden müssen, sperren etc. stellen Sie sicher, Sie hinzufügen in einer sicheren Weise.Alternativ können Sie eine Z. B. concurrentdictionarydie eine thread-sichere collection.
InformationsquelleAutor der Antwort NominSim
So könnte man denken
Whatever! it will just break the one time
- aber pustekuchen:Wichtig: Sobald das Wörterbuch ist gebrochen, es ist gebrochen!
Es geht drei Stunden von sales (bis IIS verwertete nach einem Zeitplan, weil ein Wörterbuch Hinzugefügt für debugging-Zwecke, war nicht immer auch Lesen.
Hinweis: Das laufen war für 3,5 Jahre bevor ich traf diese Bedingung.
Dieser war noch nicht einmal ein statisches Wörterbuch - es war eine MVC -
IViewLocationCache
das war eine Instanz-Methode.InformationsquelleAutor der Antwort Simon_Weaver