加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:02:47 所属栏目:Java 来源:网络整理
导读:我有一个 Windows服务,使用生产者/消费者队列模型与多个工作线程处理队列中的任务.这些任务可以很长时间运行,如果不是几个小时,按照很多分钟的顺序,不要涉及循环. 我的问题是处理服务停止以优雅地结束对这些工作线程的处理的最佳方式.我已经读过另一个SO que
我有一个 Windows服务,使用生产者/消费者队列模型与多个工作线程处理队列中的任务.这些任务可以很长时间运行,如果不是几个小时,按照很多分钟的顺序,不要涉及循环.

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读