2017-01-19 17 views
0

Я использую Автобусный брокер Azure с пакетом версией WindowsAzure.ServiceBus NuGet 3.4.4В каких случаях результат SubscriptionClient.GetMessageAsync равен null?

Когда я называю ReceiveAsync на SubscriptionClient, что связанно с подпиской на которые не публикуются никакие сообщения, возвращаемая задача завершается через минуту или около того с результатом null.

Я ожидал, что задача никогда не закончить с null

При каких условиях Целевого возвращенном этим методом в комплекте с null?

+1

Нет «GetMessageAsync». Вы связались с «ReceiveAsync», который включает в свой раздел документации причины, по которым «null» может быть возвращен. Поэтому его непонятно, в чем вопрос. –

+0

Спасибо @Damien_The_Unbeliever Я действительно имел в виду 'ReceiveAsync', но я ничего не вижу о' null' в своей документации – Martijn

+0

Хорошо, я тоже неправильно искал документацию - в собственной документации просто сказано, что это асинхронный прием. Однако, если вы посмотрите на документацию для «Получить», он документирует обстоятельства, когда он может вернуть «null». Так что поставьте 2 + 2 вместе ... –

ответ

0

Вы можете передать TimeSpan ReceiveAsync, чтобы указать, сколько времени вы хотите дождаться сообщения. По умолчанию это, вероятно, минута.

Так что вы могли бы сделать что-то вроде этого, если вы ожидаете получить по крайней мере одно сообщение каждые две недели:

client.ReceiveAsync(TimeSpan.FromDays(14));

0

API-интерфейс, который вы используете предполагает, что вы хотите, чтобы опрашивать Service Bus для сообщений; что вам придется регулярно звонить на конечную точку Service Bus, чтобы принимать сообщения. Когда сообщений нет, вы получите нулевой ответ. Я бы не рекомендовал звонить client.ReceiveAsync(TimeSpan.FromDays(14), потому что это оставит один запрос открытым на этот промежуток времени. Вместо этого нулевой результат - ожидаемое поведение, и вы должны вызывать ReceiveAsync в непрерывном цикле.

Однако, есть также API, который будет делать этот цикл для вас: OnMessage

https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptionclient?redirectedfrom=MSDN#Microsoft_ServiceBus_Messaging_SubscriptionClient_OnMessageAsync_System_Func_Microsoft_ServiceBus_Messaging_BrokeredMessage_System_Threading_Tasks_Task__

Просто убедитесь, что основной поток вашей программы не выход.