【问题标题】:Create a named scheduled job?创建一个命名的计划作业?
【发布时间】:2022-05-27 22:56:49
【问题描述】:

我需要创建一个从现在开始执行 10 分钟的计划任务。但是,我可能需要在执行之前删除该作业。我知道当这样创建工作时你会得到一个 jobid:

var jobId = BackgroundJob.Schedule<MyJob>(job => job.Execute(),TimeSpan.FromMinutes(10));

但是,这需要将 jobid 存储在数据库或某种缓存中,以便将来删除它。

是否可以像使用重复作业一样命名计划作业?理想情况下是这样的:

BackgroundJob.Schedule<MyJob>(\"MyJobName\", job => job.Execute(),TimeSpan.FromMinutes(10));

如果该作业名称已经存在,它显然需要抛出一个异常,但它允许人们使用已知数据来命名他们的作业,而不是需要保留另一个具有状态作业 ID 的数据存储。

    标签: c# hangfire


    【解决方案1】:

    据我所知,这不是开箱即用的。

    作为盲注,我会尝试这样的事情,使用IMonitoringApi

    var api = JobStorage.Current.GetMonitoringApi();
    var jobs = api.EnqueuedJobs(queue: "theQueue", from: 0, perPage: 1);
    if (jobs.Count == 1)
    {
        var jobId = jobs[0].Key;
        BackgroundJob.Delete(jobId);
    }
    

    这是假设您有一个专用队列“theQueue”来处理该特定作业。

    如果它不是专用队列,例如“默认”,您将需要迭代队列中的每个作业(api.EnqueuedCount("default") 而不是 1),查看其方法(可能还有参数)是否符合您的需要,然后删除匹配的那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多