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

How to stop and delete all processing background jobs in hangfire?

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

首先,你应该使用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);

您还可以从 Hangfire 仪表板中删除 Hangfire 作业。