取消使用Hangfire.io安排的正在运行的作业

Mor*_*ncz 6 job-scheduling hangfire

我使用hangfire.io库安排工作,我可以观察它在内置仪表板中处理.但是,我的系统要求可以从仪表板中取消作业.

可以选择删除正在运行的作业,但这只会更改数据库中作业的状态,并且不会停止运行作业.

我在文档中看到有选项可以通过,IJobCancellationToken但据我所知,它用于在整个服务器关闭时正确停止作业.

有没有办法实现已经运行的任务的编程取消?

我应该编写自己的组件来定期提取数据库并检查当前服务器实例是否正在运行已取消的作业?例如,维护字典jobId - > CancellationTokenSource,然后使用适当的tokensource信号取消.

odi*_*erj 5

文档有点不完整。满足以下任何条件IJobCancellationToken.ThrowIfCancellationRequested后,方法将引发异常:

  1. Hangfire服务器关闭启动。当有人调用StopDispose方法时触发此事件BackgroundJobServer
  2. 后台作业未处于Processed状态。
  3. 另一名工人正在执行后台作业。

后两种情况是通过查询作业存储中当前后台作业状态来执行的。因此,如果您也从仪表板中删除或重新排队取消令牌,则会抛出该令牌。