在Quartz.net中每次执行后,JobData都不会保留

时间:2013-04-05 14:14:47

标签: c# quartz.net

我有一份工作,我想跟踪最近的50次跑步。出于某种原因,似乎状态并不存储在我的简单原型中:

[PersistJobDataAfterExecution]
public class ApiJob : IJob
{
    private const string JobRunsKey = "jobRuns";
    private const int HistoryToKeep = 50;
    private const string UrlKey = "Url";

    public void Execute(IJobExecutionContext context)
    {
        var jobDataMap = context.JobDetail.JobDataMap;

        var url = context.JobDetail.JobDataMap.GetString(UrlKey);
        var client = new RestClient(url);
        var request = new RestRequest(Method.POST);
        var response = client.Execute(request);
        var runs = new List<JobRun>();
        if (jobDataMap.ContainsKey(JobRunsKey))
        {
            runs = (List<JobRun>) jobDataMap[JobRunsKey];
        }

        Console.WriteLine("I'm running so fast!");

        runs.Insert(0, new JobRun(){Message = "Hello", Result = JobResult.Ok, TimeForRun = DateTime.UtcNow});
        while (runs.Count > HistoryToKeep)
        {
            runs.RemoveAt(HistoryToKeep);
        }
        jobDataMap.Put(JobRunsKey, runs);
     }
}

我尝试使用jobDataMap.Put(JobRunsKey, runs)存储新列表,但下次触发作业时,JobDataMap中缺少密钥。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您可能没有将JobRun课程标记为可序列化

这应该有效

[Serializable]
public class JobRun
{
    public string Message       ;
    public string Result        ;
    public DateTime TimeForRun  ;
}