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

Estou usando o barramento de serviço para conectar a função da Web e a função de trabalho. Minha função de trabalho está em um loop contínuo e estou recebendo a mensagem enviada pela função web com o método QueueClient.Receive ().

Mas com esse método, se não houver mensagem na fila do barramento de serviço, ele aguardará alguns segundos para receber a mensagem, em vez de ir para a próxima linha para execução adicional. Eu esperava que houvesse algum método assíncrono para receber mensagens? ou pelo menos alguma maneira de definir esse tempo de espera?

Eu encontrei este método BeginReceive da documentação do msdnQueueClient e eu estava esperando que isso seria a resposta para a minha pergunta, mas eu não sei como usar esse método. Os parâmetros do método são callback async e estado do objeto que eu não sei o que são.

Alguma ideia?

ATUALIZAR: Graças a uma ótima solução da Sandrino, ela funciona de forma assíncrona. Mas ser assíncrono agora está me dando alguns problemas. Meu VS está falhando. Não tenho certeza qual é o problema. Abaixo está o código que estou usando.

Papel do Trabalhador:

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);
        }
     }

Estou perdendo algo que está fazendo o VS funcionar e falhar? Porque antes de mudar para BeginReceive, quando eu estava usando o QueueClient.Receive, ele estava funcionando bem e não falhando.

obrigado

questionAnswers(3)

yourAnswerToTheQuestion