メッセージをプライベートメッセージキューから取り出し、メッセージごとに1つまたは複数の電子メール(通常は最大で4または5)をメッセージコンテンツに基づいて送信するWindowsサービス(C#4.0)があります。シングルスレッドWindowsサービスの遅延OnStop
メッセージ量が少ないので、複雑さを避けてサービスを残しましたが、電子メールは重要なので、SCM停止コマンドでは、処理中のメッセージ/電子メールが処理/送信されるようにする必要があります。停止が完了しました。
OnStopではステータスを表す静的な "inProcess"フラグをチェックしており、設定されている場合はServiceBase.RequestAdditionalTime(120000)を呼び出しています。
2つの問題があります。
- 停止コマンドは、2分の要求にもかかわらず、未送信の一部の電子メールですぐに完了しますが。
- うまくいきましたが、私はどれくらい待つべきかを推測しています。
シングルスレッドサービスでこれを処理する最も良い方法は何ですか?
ありがとうございました!
グレッグ
OK、丸ごとの答えは実際には以下のように非常に単純でした。最後のメッセージOnStopの完了を強制するのではなく、単にQueue.EndPeek()を実行してから、現在のメッセージをキューに戻します。それは再び開始されます。時には明白な私たちをエスケープする.... – Serexx