【发布时间】:2011-07-04 03:50:43
【问题描述】:
【问题讨论】:
标签: windows scheduled-tasks scheduling quartz.net
【问题讨论】:
标签: windows scheduled-tasks scheduling quartz.net
我的直觉是在安装另一个调度程序之前先尝试让完整的 WinScheduler 满足您的需求 - 推理:
如果 Quartz 不能满足您的需求,请使用它。 Quartz 当然也有很多这样的功能,但是如果可以的话,不要再添加另一个服务来拥有和管理。
【讨论】:
if (task.Exists) do nothing else (task.Create)?
使用 Quartz.NET,我可以对比前面的一些观点:
这主要是关于您需要什么的问题。 Windows 计划任务可能会为您提供所需的一切。但是,如果您需要集群(分布式工作器)、对触发或失火处理规则的细粒度控制,您可能希望查看 Quartz.NET 在这些领域提供的功能。
采用满足您要求的最简单的方法,但要足够抽象以允许更改。
【讨论】:
对我来说,其他答案中未包含的一个重要区别是调度程序执行的内容。
Windows 任务计划程序只能运行可执行程序和脚本。为在 Quartz 中使用而编写的代码可以直接与项目的 .NET 组件交互。
使用任务计划程序,您必须编写一个 shell 可执行文件或脚本。在该外壳内部,您可以与项目的组件进行交互。虽然编写此 shell 代码不是一个困难的过程,但您必须考虑部署额外的文件。
如果您预计在项目的生命周期内添加更多计划任务,您最终可能需要创建额外的可执行 shell 或脚本文件,这需要更新部署过程。使用 Quartz,您不需要这些文件,从而减少了创建和部署额外任务所需的总工作量。
【讨论】:
很遗憾,如果不重新启动进程/主机/服务,就无法更新 Quartz.NET 作业程序集。对于某些人(包括我自己)来说,这是一个相当大的问题。
完全有可能为在任务计划程序下运行的作业构建框架。基于 MEF 的程序集可以由单个控制台应用程序调用,所有内容都通过配置 UI 进行管理。这是一个流行的托管包装器:
我确实很享受使用 Quart.NET 的短暂时光,但重新启动要求是一个无法克服的大问题。多年来,Marko 在这方面做得非常好,而且他总是乐于助人且反应迅速。也许有一天该项目将获得多个AppDomain 支持,这将解决这个问题。 (也就是说,这肯定是一项艰巨的工作。如果他和他的贡献者决定接受它,我们要向他们致敬。)
如果需要的话,套用 Marko 的话:
...那么 Quartz.NET 将是您的要求。
【讨论】: