2

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

4

2 回答 2

2

我认为存在延迟是因为服务倾向于做被认为“更重要”的事情,而不是简单地为用户的按钮点击和击键提供服务,例如,关闭数据库连接、断开网络连接、停止驱动程序等。这些事情可能需要几秒钟,因此操作系统会授予一些时间来彻底关闭。但是,最终,操作系统将终止该进程,这将终止所有仍在运行的线程。

.NET 中的线程可分为前台线程或后台线程。如果您询问的线程可以突然终止而不会对您的服务正在执行的操作造成任何撤消“伤害”,请将它们标记为后台线程,以便它们不会阻止进程的终止。

于 2013-01-09T23:54:27.273 回答
1

如果您不终止线程,但正确处理 ServiceStop 消息,则其他线程将继续运行约 20 秒,然后操作系统将终止服务进程,沿途终止线程。

总体来说好像没什么坏处。

于 2013-01-09T20:19:57.257 回答