.NET 4 で記述された Windows サービスがあり、無限に実行される while(running) ループを含む複数のスレッドを作成します。サービスを停止すると、実行中のブール値が false になり、while ループから抜け出し、各スレッドが停止すると、サービスは最終的に停止します。
その間、oMessageReceiver.Receive(TimeSpan.FromSeconds(30)) を呼び出します。そのため、サービスを停止しようとすると、Receive() プロセスがタイムアウトするまで最大 30 秒待たなければならないことがあります。
1 つのオプションは、タイムアウトを 30 秒からそれより短い時間に短縮することです。どのようなパフォーマンス上のペナルティが発生するかはわかりませんが、プロセスは BrokeredMessage なしでは機能しないため、リスナーを可能な限り頻繁に、かつ長く開いたままにしたいと考えています。
MessageReceiver に .BeginReceive() メソッドがあることがわかります。受信がタイムアウトするのを待っている間にサービスがハングするのを防ぐために、ここで使用できるプログラミング パターンがあると思います。無限に実行中の Windows サービスで APM の Begin/End 関数を使用する方法を説明できる人はいますか?