7

イベント ドリブン メッセージ ポンプとして設定されたサブスクリプション クライアントからのメッセージの受信を停止するにはどうすればよいですか? 現在、動作するコードがいくつかありますが、2 つのテストを連続して実行すると、2 回目のブレークが発生します。私が作成した最初のインスタンスから、メッセージがまだサブスクリプションから取り出されていることは確かです。

http://msdn.microsoft.com/en-us/library/dn130336.aspx

OnMessageOptions options = new OnMessageOptions();
            options.AutoComplete = true; // Indicates if the message-pump should call complete on messages after the callback has completed processing.

            options.MaxConcurrentCalls = 1; // Indicates the maximum number of concurrent calls to the callback the pump should initiate 

            options.ExceptionReceived += LogErrors; // Enables you to be notified of any errors encountered by the message pump

            // Start receiveing messages
            Client.OnMessage((receivedMessage) => // Initiates the message pump and callback is invoked for each message that is received. Calling Close() on the client will stop the pump.

                {
                    // Process the message
                    Trace.WriteLine("Processing", receivedMessage.SequenceNumber.ToString());
                }, options);
4

3 に答える 3

6

2 つのことを行う必要があります。

最初に、 を呼び出しますsubscriptionClient.Close()。これにより、最終的に (ただし、すぐには停止しません)、メッセージ ポンプが停止します。

次に、コールバックを受信したメッセージで、次のようにクライアントが閉じているかどうかを確認します。

if (subscriptionClient.IsClosed)
    return;
于 2016-07-28T14:26:30.183 に答える
3

を呼び出しSubscriptionClient.Close()て、それ以上のメッセージが処理されないようにすることができます。

コード内のコメントにも示されています。

クライアントで Close() を呼び出すと、ポンプが停止します。

于 2013-06-10T22:35:00.390 に答える
3

私は見て、まったく同じ動作を見ました。サブスクリプション クライアントを閉じても、メッセージ ポンプはメッセージの処理を停止しません。.Completeただし、メッセージ処理ハンドラーがメッセージに対してorを実行しようとすると.Abandon、クライアントが閉じているため、例外がスローされます。ポンプ連中を止める方法が必要です。

于 2015-08-06T14:55:42.153 に答える