在什么情况下,SubscriptionClient.GetMessageAsync的结果可以为空?

时间:2017-01-19 09:50:35

标签: c# azure servicebus

我将Azure服务总线代理与WindowsAzure.ServiceBus Nuget软件包版本3.4.4一起使用

当我在与未发布消息的订阅相关联的SubscriptionClient上调用ReceiveAsync时,返回的任务在一分钟左右后会以null结果完成。< / p>

我预计任务永远不会以null

完成

此方法返回的任务在什么条件下可以使用null完成?

2 个答案:

答案 0 :(得分:0)

您可以将TimeSpan传递给ReceiveAsync,以指定您希望等待邮件的时间。默认情况下,它可能只需一分钟。

如果您希望每两周至少收到一条消息,那么您可以这样做:

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

答案 1 :(得分:0)

您正在使用的API假设您要在服务总线上查询消息;这意味着您必须定期调用Service Bus端点才能接受消息。如果没有消息,您将收到空响应。我不建议调用client.ReceiveAsync(TimeSpan.FromDays(14),因为这会在一段时间内打开一个请求。相反,null结果是预期的行为,您应该在连续循环中调用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__

只需确保程序的主线程不会退出。