使用 C# 在 Quartz .Net 中更新 JobDataMap 无法按预期工作

Dmy*_*tro 2 c# quartz.net

当我尝试暂停我的工作时,我想更新它的数据图,以便可以将“暂停”状态保存在那里。我的代码如下所示:

public void Pause(JobKey key)
{
    var job = Scheduler.GetJobDetail(key);
    if(job == null) return;

    job.JobDataMap.Put("Status", "Paused");
    Scheduler.PauseJob(job.Key);
}
Run Code Online (Sandbox Code Playgroud)

作业按预期暂停,但其状态未更新,我不明白为什么。可能是什么原因?还有其他方法可以更新JobDatamap返回的作业吗Scheduler.GetJobDetail(key)

Dmy*_*tro 6

正如我所发现的:Quartz 仅在执行后更新作业数据映射。因此,为了解决这个问题,我必须将作业重新添加到调度程序中:

var job = Scheduler.GetJobDetail(key);
if(job == null) return;

job.JobDataMap.Put("Status", "Paused");
Scheduler.AddJob(job, true);
Scheduler.PauseJob(job.Key);
Run Code Online (Sandbox Code Playgroud)

Scheduler.AddJob(job, true);这一行指示 Quartz 用更新的作业替换存储的作业。