我正在编写一个Windows服务,需要长时间休眠(最长15个小时,最短30分钟)。我目前使用Thread.Sleep(calculatedTime)方法将代码置于休眠模式。Thread.Sleep是最好的选择,还是应该使用计时器?我已经搜索了一段时间,但找不到简明扼要的答案。由于这是一个Windows服务,我不必担心锁定UI,因此我想不到不使用Thread.Sleep的理由。
欢迎提供任何见解。
欢迎提供任何见解。
我会使用计时器,而不是 Thread.Sleep,后者可能会导致阻塞,从而防止服务关闭。
如果时间间隔很宽泛并且规律,您可以将其安排为计划任务。但是,如果您要处理较长的非一致性时间间隔,则使用计时器更好。
由于服务可能随时被服务控制管理器要求停止,因此您的线程应始终准备好响应这些请求,因此您不应使用Thread.Sleep()。相反,在主线程中创建一个手动重置事件,并在工作线程中使用其WaitOne方法和超时。当时间到期时,WaitOne将返回false。
当调用您的服务类的OnStop或OnShutdown方法时,请设置事件,这将导致WaitOne返回true,然后您可以退出工作线程。
在很多情况下,使用Thread.Sleep()
被普遍认为是不好的做法。
如果你想让服务在后台运行,你应该使用一个计时器。
如果服务只需要按照预定间隔运行,我建议你考虑使用Windows任务计划程序,让Windows在需要时运行应用程序。