在Windows服务中,使用哪个更好,Thread还是Timer?

4

您好,我刚开始接触Windows服务。我已经使用线程编写了一个Windows服务,在OnStart()方法中创建了新线程,并使用该线程运行方法,然后使用sleep线程到下一个运行时间。但是我的一个朋友说最好使用定时器而不是线程,所以我想知道哪种方式更好?感谢您的帮助。


1
线程和计时器是完全不同的,Thread.Sleep虽然可以使用,但它是一个糟糕的方法。 - Sayse
@Sayse 是的,但是开发Windows服务有更好的方法吗? - user2553512
我不知道你的Windows服务是什么,这里没有人能回答。 - Sayse
@user2553512 您的目标是在特定时间间隔(例如每小时)运行一些代码,并在此期间不执行任何操作吗? - lightbricko
@lightbricko 是的,我想在时间间隔内从 Web 服务调用一个特定的方法,所以我正在使用 Windows 服务中的线程来完成,并使线程休眠直到下一次运行。 - user2553512
2个回答

3

根据您的评论,您的目标是在特定时间间隔内运行一些代码:

从概念上讲,使用计时器比使线程休眠更好。这就是计时器的作用所在。如果您选择了线程休眠方法,我认为实际上它也可以正常工作,但最好的做法是使用计时器。

还有第三种方法-使用作业调度程序。您可以使用Windows任务计划程序或更强大的quartz.netnuget包在此处)。


这实际上是一个关于如何权衡语义正确性和实用性的问题。

  • 从语义正确性的角度来看,最好的方法是使用作业调度程序,因为您实际上想要调度一个作业。
  • 从实用性的角度来看,最好的方法可能是继续使用您已经开发的服务,即使它使线程休眠,并将时间花在其他事情上,而不是修改您已经完全可用的代码。

有关计时器和作业调度程序的更多意见:在Windows服务中使用最佳计时器


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接