如何在hangfire中停止和删除所有正在处理的后台作业?

时间:2019-06-26 10:53:02

标签: c# asp.net-core backgroundworker hangfire

我在AspNet Core项目中使用Hangfire来运行一些后台作业。当我重新启动服务器时,新的后台作业排队并正在处理,但是所有先前的后台作业都在继续处理或重新启动。我已经从数据库中删除了所有旧的正在处理的后台作业,但是没有任何更改,此已删除的作业已从数据库中删除但仍在处理中。如何停止和删除数据库中未反映的所有正在处理的后台作业?

2 个答案:

答案 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作业。