rec*_*ive 5 multithreading windows-services .net-3.5 threadpool
我正在写一个使用的Windows服务ThreadPool.QueueUserWorkItem().每个线程都是一个短暂的任务.
当服务停止时,我需要确保当前正在执行的所有线程都完成.有没有办法等待队列自行清除?
您可以ManualResetEvent在每个线程中创建一个事件(例如),并将其保存在同步列表中(使用该lock构造).任务完成后,设置事件或将其从列表中删除.
如果要加入,可以使用WaitHandle.WaitAll(MSDN文档)等待所有事件发出信号.
这是一个黑客,但我看不出如何将它简化为更简单!
编辑:此外,您可以确保没有发布新事件,然后等待几秒钟.如果它们确实是短命的,那么你就没有问题了.更简单,但更黑客.
最后,如果只是很短的时间,服务将不会退出,直到所有线程都死亡(除非它们是后台线程); 因此,如果时间很短,服务控制经理就不会介意大约一秒钟 - 根据我的经验,您可以让它们过期.
| 归档时间: |
|
| 查看次数: |
3666 次 |
| 最近记录: |