2017-09-16 4 views
0

私は、自動完了オプションを備えた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); 
     } 
    } 

私はここで何か間違ったことをやって、それはバグまたは多分意図された動作ですか?

+0

Azure Service Busによって別のスレッドで完了しています。オートコンプリートを無効にしてコールバックで自分自身を完了しようとしましたか? –

+0

手動の自動補完機能は確実です。なぜそれがメッセージを完了していないのか不思議です – 85rainbow

+0

完了が別のスレッドである場合、タスク関連の例外はそのコードには届きません。 –

答えて

0

私は仮定しています。実際のコードが何をしているのかわからない(このクライアントはオープンソースではなく、このような状況は起こらないように見える)。 ASBクライアントが実行しているコールバックの周りには例外処理がありますが、タスク例外を処理できず、メッセージの完了が可能です。クライアントhereのASBチームに問題を提起することができます。

関連する問題