Vitaliy Sokha
Vitaliy Sokha

Reputation: 25

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

I'm using Hangfire in AspNet Core project to run some background jobs. When I restart my server, new backround job enqueued and processing, but all previous background jobs continuous processing or restarting. I have removed all old processing background jobs from database, but nothing changed, this deleted job was removed from database but still processing. How can I stop and delete all processing background jobs, which are not reflect in the database?

Upvotes: 1

Views: 8998

Answers (2)

user11450789
user11450789

Reputation:

You can also delete the Hangfire jobs from the Hangfire dashboard.

Upvotes: 0

LucaSC
LucaSC

Reputation: 792

First, you should use cancellation tokens. In you job, pass an IJobCancellationToken object as argument along your other arguments:

public void MyJob( <<other args>>, IJobCancellationToken cancellationToken)
{
    for (var i = 0; i < Int32.MaxValue; i++)
    {
        cancellationToken.ThrowIfCancellationRequested();

        Thread.Sleep(TimeSpan.FromSeconds(1));
    }
}

To enqueue your job pass IJobCancellationToken as null:

string jobID = BackgroundJob.Enqueue(() => MyJob(<<other args>>, JobCancellationToken.Null));

Now to cancel and remove a job, do it through code:

BackgroundJob.Delete(jobID);

Upvotes: 5

Related Questions