mat*_*att 14 c# multithreading sleep windows-services
我正在写一个需要长时间睡眠的Windows服务(15小时是最长的睡眠,30分钟是最短的).我目前正在使用Thread.Sleep(calculatedTime)将我的代码置于睡眠模式.Thread.Sleep是最佳选择还是我应该使用计时器?我已经谷歌搜索了一段时间,无法找到简明的答案.由于这是一个Windows服务,我不必担心锁定UI,所以我想不出不使用Thread.Sleep的原因.
任何见解将不胜感激.
Mit*_*ers 20
我会使用一个计时器,Thread.Sleep,可能会导致阻止服务关闭的阻塞.
如果间隔是广泛的,并且是常规的,您也可以只安排它.但是如果你谈的是长的,不一致的间隔,那么定时器会更好.
Car*_*rra 10
由于服务控制管理器可能会要求服务随时停止,因此您的线程应始终准备好响应这些请求,因此不应使用Thread.Sleep().相反,在主线程中创建一个手动重置事件,并使用其WaitOne方法在工作线程中超时.当时间到期时,WaitOne将返回false.
调用服务类的OnStop或OnShutdown方法时,设置事件并使WaitOne返回true,然后退出工作线程.
Thread.Sleep()在很多情况下使用它通常被认为是不好的做法.
如果您希望服务在后台运行,则应使用计时器.
如果服务只需要按计划的时间间隔运行,我建议您考虑使用Windows任务计划程序,以允许Windows在您需要时运行该应用程序.
你不应该预先计算这么大的时间并睡几个小时.最好睡一分钟,然后醒来并重新计算时间,再睡一分钟.我假设计算非常便宜,或者可以通过缓存使其非常便宜.我的建议试图缓解的问题是计算机时钟令人惊讶地"跳跃",主要是由于网络时间服务纠正了时间偏差,也是因为节省了日光,尤其是因为用户调整时钟.因此,最好不断重新计算这么长时间间隔的时间,即使这意味着每分钟都会醒来.如果你在"过去"中醒来,时钟可以及时调整,也不要感到惊讶(即不要断言).
| 归档时间: |
|
| 查看次数: |
12037 次 |
| 最近记录: |