如果Windows服务在停止时没有退出线程会发生什么?

时间:2013-01-09 19:39:13

标签: .net multithreading c#-4.0 windows-services

我有一个运行多个线程的.NET Windows服务。开发人员为其添加了一些新线程,但忘记在服务停止之前添加代码以退出线程。当我停止服务时,它似乎正常停止,但exe服务进程在服务停止后继续运行几秒钟。在这段时间发生了什么以及线程会发生什么?

2 个答案:

答案 0 :(得分:2)

我认为延迟是存在的,因为服务倾向于做的事情被认为比仅仅服务用户的按钮点击和击键更“实质”,例如关闭数据库连接,断开网络连接,停止驱动程序等。这些事情可能需要几秒钟,因此操作系统会花一些时间进行干净关机。但是,最终,操作系统将终止进程,这将终止仍在运行的任何线程。

.NET中的线程可以归类为前台或后台线程。如果您询问的线程可以突然终止,而不会对您的服务执行任何“损害”,请将其标记为background threads,以便它们不会阻止该过程的终止。

答案 1 :(得分:1)

如果您没有终止线程,但正确处理ServiceStop消息,其他线程继续运行约20秒,那么操作系统将终止服务进程,从而终止线程。

一般来说似乎没有任何伤害。