在Quartz.net中每次执行后,JobData都不会保留
我有一份工作,我想跟踪最近的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(); if (jobDataMap.ContainsKey(JobRunsKey)) { runs = (List) 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
缺少键。 有什么建议?
您可能没有将JobRun类标记为Serializable 。
这应该工作
[Serializable] public class JobRun { public string Message ; public string Result ; public DateTime TimeForRun ; }