我继承了一个服务,并注意到每当我尝试通过服务停止服务时,它会出错并最终关闭,但看起来很脏。最重要的是,OnStop()事件中的日志记录甚至都没有触发。
当我查看代码时,主服务线程正在通过2个定时器执行定期任务。我认为这是问题的原因,当请求停止时,线程必须在计时器任务的中间,所以它打嗝。
下面是伪代码,处理这个问题的正确方法是什么,所以当我停止服务时它会正常退出?
protected override void OnStart(string[] args)
{
_timer1 = new Timer(OneSecond * 3) {AutoReset = true};
_timer1.Elapsed += TaskOneCode;
_timer2 = new Timer(OneSecond * 3) {AutoReset = true};
_timer2.Elapsed += TaskTwoCode;
}
protected override void OnStop
{
log("Stopping..."); <--- This line does not even fire.
}