.net – 如何在服务停止的多线程Windows服务中停止工作线程

前端之家收集整理的这篇文章主要介绍了.net – 如何在服务停止的多线程Windows服务中停止工作线程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Windows服务,使用生产者/消费者队列模型与多个工作线程处理队列中的任务.这些任务可以很长时间运行,如果不是几个小时,按照很多分钟的顺序,不要涉及循环.

我的问题是处理服务停止以优雅地结束对这些工作线程的处理的最佳方式.我已经读过另一个SO question,使用thread.Abort()是坏的设计的标志,但似乎服务OnStop()方法只有在服务终止之前完成有限的时间.我可以在ThreadAbortException的catch中进行足够的清理(没有不一致状态的危险),所以调用thread.Abort()在工作线程上似乎对我来说很好.是吗?什么是替代品?

解决方法

的确,应该避免中止.最好给他们一些时间优雅地退出 – 也许在超时后可能会考虑中止他们 – 但最终,服务停止可以通过杀死进程来做到这一点.

我会尝试在我的队列中发出一个“冲洗和退出”的信号 – 很像“关闭方法here,但是在完成时有一些信号.

如果你诉诸中止 – 认为这个过程是致命的.尽快杀死它

原文链接:https://www.f2er.com/java/126976.html

猜你在找的Java相关文章