Операция не допустима из-за текущего состояния объекта

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

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

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

5
задан CAbbott 12 April 2010 в 15:10
поделиться

1 ответ

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

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

5
ответ дан 14 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: