问题描述
我正在使用Azure Storage Queues,但我注意到我的费用很高,即使队列中没有很多物品。当分析指标时,我还注意到队列上的带宽很高。经过一番调查,我发现我的代码有问题。我使用以下循环:
private async Task ProcessEventsAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
var messages = await _queueClient.ReceiveMessagesAsync(maxMessages: 10,cancellationToken: cancellationToken).ConfigureAwait(false);
foreach (var message in messages.Value)
{
// Event handling here...
await _queueClient.DeleteMessageAsync(message.MessageId,message.PopReceipt,cancellationToken: CancellationToken.None).ConfigureAwait(false);
}
}
}
当队列中没有消息时,似乎QueueClient.ReceiveMessagesAsync
方法也会返回。结果导致我的代码不断循环并占用大量CPU和带宽。
我希望此调用能够阻塞,直到队列中至少有一条消息为止。文档对此方法进行了以下描述:
从队列的前面接收一个或多个消息。
这表明它将阻塞,直到至少有一条消息可用为止。另一种选择是每隔几秒钟轮询一次队列,但我宁愿不轮询队列。为了获得适当的响应时间,我需要经常进行轮询。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)