我使用带有自动完成选项的QueueClient消息泵。当从回调中抛出异常时,重试该消息并最终破坏。
不幸的是,当从回调中抛出TaskCancelationException或OperationCanceledException时,情况并非如此。消息自动完成,从不重试。此外,还不调用OptionsOnExceptionReceived事件处理程序。
_queueClient = QueueClient.CreateFromConnectionString(connectionString, queueName, ReceiveMode.PeekLock);
...
public void OnMessageAsync(Func<BrokeredMessage, Task> callback)
{
if (_queueClient.IsClosed == false)
{
var options = new OnMessageOptions
{
MaxConcurrentCalls = _maxConcurrentCalls,
AutoRenewTimeout = TimeSpan.FromMinutes(_autoRenewTimeoutInMinutes),
AutoComplete = true
};
options.ExceptionReceived += OptionsOnExceptionReceived;
_queueClient.OnMessageAsync(callback, options);
}
}
我在这里做错了,这是一个错误还是可能的行为?
答案 0 :(得分:0)
我在假设。不知道实际代码在做什么(这个客户端不是开源的,在新客户端看起来不应该发生这种情况)。您的回调是ASB客户端正在执行的异常处理,但它无法处理任务异常,从而允许完成消息。您可以针对客户here向ASB团队提出问题。