Coleções simultâneas comendo muita CPU sem Thread.Sleep

Qual seria o uso correto de ambos,BlockingCollection ouConcurrentQueue para que você possa desenfileirar livremente itens sem queimar metade ou mais da CPU usando um encadeamento?

Eu estava executando alguns testes usando 2 threads e, a menos que eu tivesse um Thread.Sleep de pelo menos 50 ~ 100ms, sempre atingia pelo menos 50% da minha CP

Aqui está um exemplo fictício:

private void _DequeueItem()
{
    object o = null;
    while(socket.Connected)
    {
        while (!listOfQueueItems.IsEmpty)
        {
            if (listOfQueueItems.TryDequeue(out o))
            {
                // use the data
            }
        }
    }
}

Com o exemplo acima, eu teria que definir um thread.sleep para que a CPU não explodiss

Nota: Eu também tentei sem o tempo para a verificação IsEmpty, o resultado foi o mesm

questionAnswers(3)

yourAnswerToTheQuestion