Metoda asynchroniczna dla QueueClient.Receive ()?

Używam magistrali usług do łączenia roli sieci Web i roli pracownika. Moja rola pracownika jest w ciągłej pętli i otrzymuję wiadomość wysłaną przez rolę WWW za pomocą metody QueueClient.Receive ().

Jednak w przypadku tej metody, jeśli w kolejce magistrali usług nie ma komunikatu, czeka on kilka sekund na odebranie wiadomości, zamiast przejść do następnej linii w celu dalszego wykonania. Miałem nadzieję, że będzie jakiś asynchroniczny sposób odbierania wiadomości? lub przynajmniej jakiś sposób na ustawienie tego czasu oczekiwania?

Znalazłem tę metodę BeginReceive z dokumentacji msdnKlient kolejki i miałem nadzieję, że to będzie odpowiedź na moje pytanie, ale nie wiem, jak użyć tej metody. Parametrami metody są asynchroniczne wywołania zwrotne i stan obiektu, których nie wiem, czym one są.

Jakieś pomysły?

AKTUALIZACJA: Dzięki świetnemu rozwiązaniu Sandrino działa niezawodnie. Ale bycie asynchronicznym sprawia mi teraz pewne problemy. Mój VS ulega awarii. Nie jestem pewien w czym tkwi problem. Poniżej znajduje się kod, którego używam.

Rola pracownika:

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

Czy brakuje mi niczego, co sprawia, że ​​VS działa ponad i działa? Ponieważ przed przejściem do BeginReceive, gdy iw jak przy użyciu QueueClient.Receive, działało poprawnie i nie ulegało awarii.

Dzięki

questionAnswers(3)

yourAnswerToTheQuestion