问题描述
我有 ASP.NET Core 应用程序,我正在使用 Quartz.NET 进行重复作业,该作业每 60 秒运行一次我的 TestMethod()
并且工作正常。
我有时需要手动运行此作业。如何强制 Quartz.NET 在手动运行 60 秒后进行下一次重复调用?
这是我需要完成的:
00:01:00 -> Automatic run of TestMethod();
00:02:00 -> Automatic run of TestMethod();
00:02:10 -> Manual run of TestMethod();
00:03:10 -> Automatic run of TestMethod(); (Note: 60 seconds after last run)
...
也许可以通过 Hangfire 库实现?
解决方法
我猜你不能用 Quartz 或 Hangfire 做到这一点。基于计划的作业通常不受手动运行的影响。您可能还会注意到,基于调度的作业没有考虑执行时间,因此可能会导致这样的情况,即您有一个作业仍在进行中(来自上一次运行),而另一个作业已按调度启动。
您可以使用以下模式代替简单的重复作业:
- 安排一次作业执行
- 在执行结束时重新安排已完成的作业。
这将帮助您避免上述情况,还可以让您安排手动触发后的下一次运行。