Асинхронный метод для QueueClient.Receive ()?
Я использую служебную шину для соединения веб-роли и рабочей роли. Моя рабочая роль находится в непрерывном цикле, и я получаю сообщение, отправленное веб-ролью с помощью метода QueueClient.Receive ().
Но при использовании этого метода, если в очереди служебной шины нет сообщения, он ожидает получения сообщения в течение нескольких секунд, а не переходит на следующую строку для дальнейшего выполнения. Я надеялся, что будет какой-то асинхронный метод для получения сообщений? или хотя бы какой-то способ установки этого времени ожидания?
Я нашел этот метод BeginReceive из документации MSDNQueueClient и я надеялся, что это будет ответом на мой вопрос, но я не знаю, как использовать этот метод. Параметры метода - асинхронный обратный вызов и состояние объекта, которые я не знаю, каковы они.
Есть идеи?
ОБНОВИТЬ: Благодаря отличному решению Sandrino, оно работает асинхронно. Но асинхронность теперь доставляет мне некоторые проблемы. Мой VS падает. Не уверен, в чем проблема. Ниже приведен код, который я использую.
Роль работника:
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);
}
}
Я пропускаю что-нибудь, что заставляет VS работать и падать? Потому что, прежде чем перейти к BeginReceive, когда я использую QueueClient.Receive, он работал нормально и не зависал.
Спасибо