私は、自動完了オプションを備えたQueueClientメッセージポンプを使用しています。コールバックからスローされた例外がある場合、メッセージは再試行され、最終的には無効化されます。AzureサービスバスのメッセージがTaskCancelationExceptionで再試行される
残念ながら、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);
}
}
私はここで何か間違ったことをやって、それはバグまたは多分意図された動作ですか?
Azure Service Busによって別のスレッドで完了しています。オートコンプリートを無効にしてコールバックで自分自身を完了しようとしましたか? –
手動の自動補完機能は確実です。なぜそれがメッセージを完了していないのか不思議です – 85rainbow
完了が別のスレッドである場合、タスク関連の例外はそのコードには届きません。 –