我有一段代码需要在Windows Server 2003机器上运行,且每分钟运行一次。
处理这个问题的推荐方法是什么?是否将其设计为一个控制台服务并让任务计划程序每分钟触发它是可行的?(这样做可能吗?)或者我应该直接将其编写成Windows服务?
处理这个问题的推荐方法是什么?是否将其设计为一个控制台服务并让任务计划程序每分钟触发它是可行的?(这样做可能吗?)或者我应该直接将其编写成Windows服务?
由于需要每分钟运行一次,我建议编写一个Windows服务。 它并不是很复杂,如果您以前没有做过这个,学习如何完成它将是很棒的。
我不建议每分钟调用计划任务。
我建议你将其编写为Windows服务。我发现计划任务并不是很可靠,而当它无法运行时,我还没有找到一个简单的方法来找出原因。
对于我们的需求来说,Windows计划任务一直相当可靠,我们几乎在所有情况下都喜欢它们,而不是Windows服务,因为它们易于安装且具有高级恢复功能。如果代码的某个部分被锁定或循环执行了某个不应该执行的代码,则Windows服务始终处于开启状态可能会成为问题。我们通常以这种方式编写代码:
Init();
Run();
CleanUp();
作为定时任务的一部分,我们设置了一个进程运行的时间限制,并在超时时终止该进程。如果我们有一个有问题的代码段,定时任务将终止它并在下一分钟重新启动进程。
在寻找定时服务帮助的过程中,我发现了一篇非常好的Jon Galloway的文章。
如果使用Windows服务进行定时任务,会有各种缺点。我同意这个观点。我建议使用Task Scheduler,它的实现很简单。请参考实现任务调度程序的详细信息。希望这些信息有助于确定实现方法。
我认为这取决于它要做什么,但总体而言,我始终支持尽可能少的层级。如果您将其编写为控制台服务并使用任务计划程序,则需要维护两个位置。
如果您将其编写为Windows服务,则只需少一个地方检查以防出现问题。
我同意,创建一个控制台可执行文件并安排每分钟运行是一种浪费精力的做法。我建议尝试使用Quartz.Net这样的工具。这样你就可以创建一个简单的任务并安排它每分钟运行。