У меня есть своя ошибка в моем коде. Это очень редко (бывает, раз в несколько недель может быть), но там, и я не уверен, почему.
У нас есть 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)
, и я могу видеть в отладчике, что это сообщение равно null.
Невозможно, чтобы нулевое значение было помещено в очередь (см. первый бит кода), и это единственные 2 вещи, которые используют очередь.
Является ли Queue не потокобезопасным, может быть, что я нахожусь в тот момент, когда другой поток задерживается, и это вызывает сбой?