取消或删除预定作业 - HangFire

我已经通过使用 Hangfire 库安排了一项工作。我的预定代码如下。


BackgroundJob.Schedule(() => MyRepository.SomeMethod(2),TimeSpan.FromDays(7));


public static bool DownGradeUserPlan(int userId)

    {

        //Write logic here

    }

现在我想稍后在某个事件中删除此计划作业。


翻阅古今
浏览 202回答 2
2回答

BIG阳

BackgroundJob.Schedule 返回您该作业的 ID,您可以使用它来删除该作业:var jobId = BackgroundJob.Schedule(() =>  MyRepository.SomeMethod(2),TimeSpan.FromDays(7));BackgroundJob.Delete(jobId);

慕桂英546537

您无需保存他们的 ID 即可在以后检索作业。相反,您可以使用Hangfire API的MonitoringApi类。请注意,您需要根据需要过滤掉作业。Text是我的示例代码中的自定义类。public void ProcessInBackground(Text text){    // Some code}public void SomeMethod(Text text){    // Some code    // Delete existing jobs before adding a new one    DeleteExistingJobs(text.TextId);    BackgroundJob.Enqueue(() => ProcessInBackground(text));}private void DeleteExistingJobs(int textId){    var monitor = JobStorage.Current.GetMonitoringApi();    var jobsProcessing = monitor.ProcessingJobs(0, int.MaxValue)        .Where(x => x.Value.Job.Method.Name == "ProcessInBackground");    foreach (var j in jobsProcessing)    {        var t = (Text)j.Value.Job.Args[0];        if (t.TextId == textId)        {            BackgroundJob.Delete(j.Key);        }    }    var jobsScheduled = monitor.ScheduledJobs(0, int.MaxValue)        .Where(x => x.Value.Job.Method.Name == "ProcessInBackground");    foreach (var j in jobsScheduled)    {        var t = (Text)j.Value.Job.Args[0];        if (t.TextId == textId)        {            BackgroundJob.Delete(j.Key);        }    }}我的参考:https : //discuss.hangfire.io/t/cancel-a-running-job/603/10
打开App,查看更多内容
随时随地看视频慕课网APP