private void TryEnqueue(Envelope envelope)
{
var queueIndex = 0;
var insertIntoIndex = -1;
while (true)
{
var hasMoreMessagesInTheQueue = queueIndex < _messageQueue.Count;
if (hasMoreMessagesInTheQueue)
{
var queuedMessage = _messageQueue[queueIndex];
queueIndex++;
if (queuedMessage.Message is ISystemMessage)
insertIntoIndex = queueIndex;
}
else if (insertIntoIndex == -1)
{
_messageQueue.Add(envelope);
return;
}
else
{
_messageQueue.Insert(insertIntoIndex, envelope);
return;
}
}
}