哪个更适合用于定期工作:服务或计划任务?

我有一项需要每30秒运行一次的任务。 我可以做两件事之一:

  1. 编写一个运行任务一次的命令行应用程序,等待30秒,再次运行它然后退出。 我可以使用Windows中的计划任务安排此任务,以便每分钟运行一次

  2. 编写一个在每次运行之间等待30秒的情况下重复运行任务的服务。

在我看来,1号更简单,我会默认选择这样做。 我懦弱了吗? 我有理由将其作为服务而不是计划任务吗? 两者的优点和缺点是什么,你最后会选择哪一个?

我最近读了一篇关于这个问题的好文章 。 这就是为什么你不应该编写服务来运行定期工作的很多理由。 此外,之前已经提出过这个问题:

https://stackoverflow.com/questions/390307/windows-service-vs-scheduled-task Windows服务或计划任务,我们更喜欢哪一个?

使用计划任务的一个优点是,如果运行服务存在一些潜在风险,例如内存泄漏或挂起网络连接,则Windows服务可能会长时间挂起,对其他用户产生负面影响。 另一方面,计划任务被写为短期运行,因此即使它确实泄漏,效果也会最小化。

另一方面,上述某个问题中的某个人评论说调度程序的精确度限制在1分钟范围内,因此您可能会看到调度程序无法每30秒准确地运行您的任务。

显然需要考虑许多权衡因素,但希望这有助于您做出正确的决定。

如果你试图每隔30秒运行一次,我会选择选项2.在这种情况下,这几乎是一项持续运行的工作。 启动和停止进程的开销可能高于进程本身,特别是如果使用适当的计时器。

如果你的工作每天运行一次(或一天几次),那么我会选择1 – 使用计划任务。

在我看来,Windows中的任务调度程序看起来有点不稳定。 我想你会得到一个更可靠的服务运行结果。

此外,服务可以将资源保留在内存中,例如从文件读取输入,并且只需要在启动服务时执行此操作,而不是每30秒执行一次。

30秒是处理周期之间相当短的间隔(相对而言)。 和其他人一样,我对任务调度程序感到担忧,我担心这样一个短暂的间隔只会加剧你采取这种方法时可能遇到的问题。 如果这是我的项目,我几乎肯定会使用该服务。