在此Windows服务的生命周期中的某个时刻,您可能希望通过services.msc关闭它或重新启动它,但是如果您无法在服务的时间跨度内停止所有操作并终止Windows服务中的所有线程. msc期望用stop程序完成,它会挂起,你必须从任务管理器中删除它.
由于上面提到的问题,我的问题如下:如何实现处理Windows服务关闭的故障安全方法?我有一个挥发性布尔值作为关闭信号,由我的服务基类中的OnStop()启用,并且应该优雅地停止我的主循环,但如果在某个其他层中有一个操作,这是不值得的是时候做任何操作了.
应如何处理?我目前处于亏损状态,需要一些创造性的投入.
解决方法
这意味着您需要调整异步方法以考虑取消令牌.
您还应该知道ServiceBase.RequestAdditionalTime
.如果无法在适当的时候取消所有任务,您可以申请延长期.
或者,也许您可以探索IsBackground
替代方案.当进程即将退出时,CLR会停止Windows服务中启用了此功能的所有线程:
A thread is either a background thread or a foreground thread. Background threads are identical to foreground threads,except that background threads do not prevent a process from terminating. Once all foreground threads belonging to a process have terminated,the common language runtime ends the process. Any remaining background threads are stopped and do not complete.