我有一个 Windows 服务(C# 4.0),它从私人消息队列中挑选消息,并根据消息内容为每条消息发送一封或多封电子邮件(通常最多 4 或 5 封)。
消息量很低,因此我避免了复杂性并让服务保持单线程,但电子邮件很重要,因此我需要确保在 SCM 停止命令上,任何进程中的消息/电子邮件在停止完成之前处理/发送。
在 OnStop 中,我正在检查一个表示状态的静态“inProcess”标志,如果已设置,我将调用 ServiceBase.RequestAdditionalTime(120000)。
有2个问题:
- 尽管请求了 2 分钟,但停止命令会立即完成,但有一些电子邮件未发送。
- 即使它有效,我也只是猜测我应该等待多长时间。
在单线程服务中处理此问题的最佳方法是什么?
谢谢你的帮助!
格雷格