Имеется некоторая Worker Role, которая крутится в Azure. Её задачей является брать сообщения из одной очереди ServiceBus, как-то обрабатывать их и помечать в БД, а затем сформировать новое сообщение на основе данных из первого и отправить в другую очередь.
Пусть первая очередь называется task, а вторая - command.
Создаём клиентов:
_taskQueueClient = QueueClient.CreateFromConnectionString(CONNECTION_STRING, TASK_QUEUE_NAME);
_commandQueueClient = QueueClient.CreateFromConnectionString(CONNECTION_STRING, СOMMAND_QUEUE_NAME);
Для первой очереди в методе Run подписываемся на события OnMessage:
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false; // Indicates if the message-pump should call complete on messages after the callback has completed processing.
options.MaxConcurrentCalls = 4; // Indicates the maximum number of concurrent calls to the callback the pump should initiate
_taskQueueClient.OnMessage(Callback, options);
И создаём следующий метод Callback:
private async void Callback(BrokeredMessage receivedMessage)
{
///... некоторый код опущен
await BusinessLayer.DoSomeWork1(arg);
await BusinessLayer.DoSomeWork2(arg);
await _commandQueueClient.SendAsync(new BrokeredMessage(data));
receivedMessage.Complete();
}
Что может такого происходить за кулисами во время
await BusinessLayer.DoSomeWork2(arg);, что после него receivedMessage становится Disposed?