Похоже, у вас есть одна коллекция, которую вы читаете и модифицируете из нескольких потоков (для разных запросов). Начнем с того, что небезопасно использовать Queue
- и , в частности , не соответствует действительности, если вы выполняете итерацию по коллекции, когда изменяете ее в другой. (РЕДАКТИРОВАТЬ: я только что заметил, что вы даже не используете универсальную коллекцию. Если вы используете .NET 4, нет никаких причин использовать неуниверсальные коллекции ...)
Непонятно, чего вы пытаетесь достичь - вы можете суметь сойти с рук, просто переключившись на использование ConcurrentQueue<T>
, но вы должны знать, что в тот момент, когда вы перебираете коллекцию, прочитанные вами значения, возможно, уже удалены из другого потока.