Операция недействительна из-за текущего состояния объекта - PullRequest
5 голосов
/ 12 апреля 2010

Иногда при запуске приложения Mono .NET (кажется, что оно не зависит от входных данных, поскольку оно не изменяется), я сталкиваюсь со следующей ситуацией: при попытке удалить элемент из очереди (непустой, я заранее проверяю его счетчик) выдается исключение:

Необработанное исключение: System.InvalidOperationException: операция недопустима из-за текущего состояния объекта в System.Collections.Generic.Queue 1[DBWorkItem].Peek ()[0x00000] at System.Collections.Generic.Queue 1 [DBWorkItem] .Dequeue () [0x00000] в DBProcessor.process (System.Object q) [0x0006b] в <...>

Хотя я, безусловно, могу поймать это исключение, элемент исключен и потерян. Кто-нибудь еще сталкивался с таким поведением тоже?

1 Ответ

5 голосов
/ 12 апреля 2010

У вас есть несколько потоков, использующих эту очередь? Может быть не пустым, когда вы проверяете счетчик, но затем может быть пустым, когда вы пытаетесь посмотреть на предмет.

Если у вас есть короткая, но полная программа, демонстрирующая проблему, мы можем сказать наверняка. Конечно, возможно, что это ошибка Mono, хотя мой опыт показывает, что системные фреймворки обычно более надежны, чем код, вызывающий их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...