Método asíncrono para QueueClient.Receive ()?

Estoy utilizando el bus de servicio para conectar el rol web y el rol de trabajador. Mi rol de trabajador está en un bucle continuo y estoy recibiendo el mensaje enviado por el rol web con el método QueueClient.Receive ().

Pero con este método, si no hay ningún mensaje en la cola del bus de servicio, espera unos segundos para recibir el mensaje en lugar de pasar a la siguiente línea para continuar la ejecución. ¿Esperaba que hubiera algún método asincrónico para recibir mensajes? ¿O al menos alguna forma de configurar este tiempo de espera?

Encontré este método BeginReceive de la documentación msdn deQueueClient Y esperaba que esta fuera la respuesta a mi pregunta, pero no sé cómo usar este método. Los parámetros del método son la devolución de llamada asíncrona y el estado del objeto, que no sé cuáles son.

¿Algunas ideas?

ACTUALIZAR: Gracias a una gran solución de Sandrino, funciona de forma asíncrona. Pero ser asíncrono ahora me está dando algunos problemas. Mi VS se está estrellando. No estoy seguro de cual es el problema. A continuación se muestra el código que estoy usando.

Rol del trabajador:

public override void Run()
    {
while (!IsStopped)
        {                
                // Receive the message from Web Role to upload the broadcast to queue
                BroadcastClient.BeginReceive(OnWebRoleMessageReceived, null);                    

                // Receive the message from SignalR BroadcastHub
                SignalRClient.BeginReceive(OnSignalRMessageReceived, null);                    

            }
}


public void OnWebRoleMessageReceived(IAsyncResult iar)
    {
        BrokeredMessage receivedBroadcastMessage = null;
        receivedBroadcastMessage = BroadcastClient.EndReceive(iar);

        if (receivedBroadcastMessage != null)
        {   //process message
           receivedBroadcastMessage.Complete();
        }
    }

public void OnSignalRMessageReceived(IAsyncResult iar)
    {
        BrokeredMessage receivedSignalRMessage = null;
        receivedSignalRMessage = SignalRClient.EndReceive(iar);

        if (receivedSignalRMessage != null)
        {
            //process message
           receivedSignalRMessage.Complete();

           WorkerRoleClient.Send(signalRMessage);
        }
     }

¿Me estoy perdiendo algo que está haciendo que el VS trabaje y se caiga? Porque antes de cambiar a BeginReceive, cuando estaba usando QueueClient, recibí que funcionaba bien y no fallaba.

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta