我在AspNet Core项目中使用Hangfire来运行一些后台作业。当我重新启动服务器时,新的后台作业排队并正在处理,但是所有先前的后台作业都在继续处理或重新启动。我已经从数据库中删除了所有旧的正在处理的后台作业,但是没有任何更改,此已删除的作业已从数据库中删除但仍在处理中。如何停止和删除数据库中未反映的所有正在处理的后台作业?
答案 0 :(得分:0)
首先,您应该使用cancellation tokens。在您的工作中,将IJobCancellationToken对象作为参数与其他参数一起传递:
public void MyJob( <<other args>>, IJobCancellationToken cancellationToken)
{
for (var i = 0; i < Int32.MaxValue; i++)
{
cancellationToken.ThrowIfCancellationRequested();
Thread.Sleep(TimeSpan.FromSeconds(1));
}
}
要排队工作,请将IJobCancellationToken设置为null:
string jobID = BackgroundJob.Enqueue(() => MyJob(<<other args>>, JobCancellationToken.Null));
现在要取消和删除作业,请通过代码进行操作:
BackgroundJob.Delete(jobID);
答案 1 :(得分:0)
您还可以从Hangfire仪表板删除Hangfire作业。