Colecciones concurrentes comiendo demasiada CPU sin Thread.Sleep

¿Cuál sería el uso correcto de cualquiera,BlockingCollection oConcurrentQueue para que pueda retirar elementos libremente sin quemar la mitad o más de su CPU con un hilo?

Estaba ejecutando algunas pruebas con 2 hilos y, a menos que tuviera un Thread.Sleep de al menos 50 ~ 100 ms, siempre alcanzaría al menos el 50% de mi CPU.

Aquí hay un ejemplo ficticio:

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

Con el ejemplo anterior, tendría que configurar un thread.sleep para que la CPU no explote.

Nota: También lo he intentado sin tiempo para la verificación IsEmpty, el resultado fue el mismo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta