使用Quartz.NET,我可以对之前提到的一些点进行对比:
这主要取决于您的需求。Windows定时任务可能已经提供了您所需的所有功能。但是,如果您需要集群(分布式工作者)、精细控制触发或错误处理规则,您可能会想查看Quartz.NET在这些领域所提供的功能。
选择最简单的功能以满足您的需求,但又要足够抽象以允许更改。
在安装另一个调度程序之前,我的第一反应是尝试让 WinScheduler 能够满足您的需求 - 原因如下:
如果 WinScheduler 不能满足您的需求,则可以考虑 Quartz。Quartz 当然也有许多这些功能,但是如果可能的话,建议不要再添加另一个需要拥有和管理的服务。
if (task.Exists) do nothing else (task.Create)
? - Wolfish对我来说,其他答案中没有包括的一个重要区别是由计划程序执行的内容。
Windows任务计划程序只能运行可执行程序和脚本。为Quartz编写的代码可以直接与项目的.NET组件交互。
使用任务计划程序,您需要编写一个shell可执行文件或脚本。在该shell内部,您可以与项目的组件进行交互。虽然编写这个shell代码并不是一个困难的过程,但您必须考虑部署额外的文件。
如果您预计在项目生命周期内添加更多的定期任务,则可能需要创建其他可执行shell或脚本文件,这需要更新部署过程。使用Quartz,您不需要这些文件,这降低了创建和部署其他任务所需的总体工作量。
不幸的是,Quartz.NET作业程序集无法在不重启进程/主机/服务的情况下进行更新。对于一些人来说(包括我自己),这是一个相当大的问题。
完全有可能为在任务计划程序下运行的作业构建框架。基于MEF的程序集可以由单个控制台应用程序调用,并通过配置UI进行管理。以下是一个受欢迎的托管包装器:
我很喜欢与Quart.NET一起工作的短暂时间,但重启要求是一个无法克服的大问题。Marko多年来一直在做出伟大的贡献,并且他总是乐于助人和响应迅速。也许有一天该项目将获得多个AppDomain
支持,这将解决这个问题。(话虽如此,如果他和他的贡献者决定承担这项工作,那么这将是一项艰巨的工作。向他们致敬。)
引用Marko的话,如果您需要:
...那么Quartz.NET将是您的首选。