2010-04-12 7 views
5

Wenn ich eine Mono .NET-Anwendung ausführe (es scheint nicht von den Eingabedaten abhängig zu sein, da sie sich nicht ändert), stoße ich manchmal auf folgende Situation: versucht, ein Element aus der Warteschlange entfernt von einer (nicht leer ist, überprüfe ich seine Zählung vorher) Queue, wird eine Ausnahme ausgelöst:Der Vorgang ist aufgrund des aktuellen Status des Objekts nicht gültig

Unbehandelte Ausnahme: System.InvalidOperationException: ist der Betrieb aufgrund des aktuellen Zustands des Objekts ungültig bei System.Collections.Generic.Queue 1[DBWorkItem].Peek()[0x00000] at System.Collections.Generic.Queue 1 [DBWorkItem] .Dequeue() [0x00000] bei DBProcessor.process (System.Object q) [0x0006b] in < ...>

Obwohl ich diese Ausnahme sicherlich fangen kann, wird das Element aus der Warteschlange genommen und verloren. Ist sonst noch jemand auf dieses Verhalten gestoßen?

+0

Zugriff auf diese Warteschlange aus mehreren Threads? –

Antwort

5

Haben Sie mehrere Threads mit dieser Warteschlange? Es kann nicht leer sein, wenn Sie die Anzahl überprüfen, aber dann leer, wenn Sie versuchen, den Gegenstand zu sehen.

Wenn Sie ein kurzes, aber vollständiges Programm haben, das das Problem demonstriert, können wir sicher sagen. Natürlich ist es möglich, dass es sich um einen Mono-Bug handelt, obwohl System-Frameworks meiner Erfahrung nach robuster sind als der Code, der sie aufruft.

+0

Ich benutze tatsächlich mehrere Threads, jedoch hat jeder Thread seine eigene Warteschlange (die Arbeitselemente enthält, die gegen die Datenbank gefeuert werden), also sollte dies kein Problem sein. Ich werde jedoch versuchen, es zu untersuchen. Leider ist der Code viel zu komplex, um ihn hier zu posten ... – DBa

+0

@DBa: Dann nimm den Code und hammer ihn, bis es * nicht * zu komplex ist, um hier zu posten. Sie * sagen *, dass jeder Thread seine eigene Warteschlange hat - wie sicher sind Sie, dass das wirklich der Fall ist? Das mag die Absicht sein, aber wenn zwei Threads dieselbe Warteschlange überprüfen, könnte das das Problem sein. –

+0

@DBa, haben Sie eine Lösung für dieses Problem gefunden? Irgendein Update? Hilfe geschätzt, danke! – Tate

Verwandte Themen