为了账号安全,请及时绑定邮箱和手机立即绑定

取消或删除预定作业 - HangFire

取消或删除预定作业 - HangFire

C#
翻阅古今 2021-11-21 11:02:20
我已经通过使用 Hangfire 库安排了一项工作。我的预定代码如下。BackgroundJob.Schedule(() => MyRepository.SomeMethod(2),TimeSpan.FromDays(7));public static bool DownGradeUserPlan(int userId)    {        //Write logic here    }现在我想稍后在某个事件中删除此计划作业。
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

BackgroundJob.Schedule 返回您该作业的 ID,您可以使用它来删除该作业:


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


BackgroundJob.Delete(jobId);


查看完整回答
反对 回复 2021-11-21
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您无需保存他们的 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


查看完整回答
反对 回复 2021-11-21
  • 2 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信