私は.NET 4で書かれたWindowsサービスを持っていて、無限に実行中の(実行中の)ループを含む複数のスレッドを作成します。私がサービスを停止すると、実行中のbooleanはfalseになり、whileループから抜け出し、各スレッドがそれを実行すると、サービスは最終的に停止します。一方、内部Microsoft ServiceBus MessageReceiver Receiveコールをキャンセルするにはどうすればよいですか?
、それはoMessageReceiver.Receive(TimeSpan.FromSeconds(30))を呼び出します。時にはサービスを停止しようとすると、Receive()プロセスがタイムアウトするまで最大30秒待たなければなりません。
1つの選択肢は、タイムアウトを30秒からそれ以下に減らすことです。どのようなパフォーマンス上の不利益が発生するのか分かりませんが、プロセスはBrokeredMessageなしでは何もしないので、実際にはリスナーを可能な限り長く開いておきたいと思います。
MessageReceiverに.BeginReceive()メソッドがあることがわかります。私は、ここで使用できるプログラミングパターンがあり、受信がタイムアウトになるのを待っている間、サービスがハングしないようにすることができます。無限に稼働しているWindowsサービスでBegin/End APM機能を使用する方法を説明できる人はいますか?