在 Quartz.Net - windows 服务或单例中安排 Web 服务

scheduling web services in Quartz.Net - windows service or singleton

我有一个 Web 应用程序 运行 在后端处理大量数据处理作业,因此我不想让服务器停滞不前,我想安排作业并决定尝试 Quartz.Net .

我想最明显的事情是将调度程序创建为 windows 服务。我有类似 运行ning 的东西,但发现 windows 服务有点麻烦,原因有几个(其中之一是如果它崩溃,则需要手动重新启动)。

我认为更优雅的方式是将服务创建为单例,我的问题是:

在每个 ashx 中,它将是所有后端调用的单例?

由于您有多个问题,为了清楚起见,我将它们复制到这里:

  1. 如果我有几个 ashx 后端调用,我可以这样声明吗...

如果您为 ashx 定义了多个 class,那么每个 class 都会获得一个新的调度程序实例。所以不,只是在每个人身上声明一个 private static 属性 不会给你一个单身人士。如果您在 global.asax 文件中声明一个 public static 属性,那么是的,您将拥有一个单身人士。

  1. 我可以检查 运行 个工作 scheduler.GetCurrentlyExecutingJobs();如果没有,关闭调度程序?

是的。或者,您可以调用关闭方法并使用允许您指定是否等待所有作业完成的重载

  1. scheduler.GetCurrentlyExecutingJobs(); return 所有 rejected/waiting 个职位?

没有,只是目前正在执行的。如果需要,您可以通过调用 GetJobKeys and then perhaps calling GetJobDetail 从调度程序中获取计划作业列表。

  1. 如果调度程序出现故障,我该如何启动它?

您可以调用 Start 来启动调度程序,但如果您已经调用了 Shutdown 则不能调用它,因此,您必须创建一个新的调度程序实例然后启动它。