プライベート メッセージ キューからメッセージを取得し、メッセージの内容に基づいて、メッセージごとに 1 つ以上の電子メール (通常は最大で 4 つまたは 5 つ) を送信する Windows サービス (C# 4.0) があります。
メッセージの量が少ないので、複雑さを避けてサービスをシングル スレッドのままにしましたが、電子メールは重要であるため、SCM 停止コマンドで処理中のメッセージ/電子メールが停止が完了する前に処理/送信されるようにする必要があります。
OnStop では、ステータスを表す静的な「inProcess」フラグを確認しています。設定されている場合は、ServiceBase.RequestAdditionalTime(120000) を呼び出しています。
2 つの問題があります。
- 停止コマンドは、2 分間の要求にもかかわらず、一部の電子メールが送信されずにすぐに完了します。
- うまくいったとしても、どれだけ待つべきかを推測しているだけです。
シングルスレッドサービスでこれを処理する最良の方法は何ですか?
ご協力いただきありがとうございます!
グレッグ