У меня странная ошибка в моем коде. Это крайне редко (возможно, случается раз в несколько недель), но оно есть, и я не знаю, почему.
У нас работает 2 потока, 1 поток получает сетевые сообщения и добавляет их в очередь следующим образом:
DataMessages.Enqueue(new DataMessage(client, msg));
Другой поток забирает сообщения из этой очереди и обрабатывает их, например:
while (NetworkingClient.DataMessages.Count > 0)
{
DataMessage message = NetworkingClient.DataMessages.Dequeue();
switch (message.messageType)
{
...
}
}
Однако, однажды, очень часто я получаю исключение NullReferenceException в строке switch (message.messageType)
, и я вижу в отладчике, что сообщение пустое.
Невозможно, чтобы в очередь было помещено нулевое значение (см. Первый бит кода), и это единственные 2 вещи, которые используют очередь.
Разве очередь не является поточно-ориентированной, может ли быть, что я выключаю в тот момент, когда другая нить ставится в очередь, и это вызывает ошибку?