问题描述
我使用 C# Quartz.NET 作为命令行应用程序的一部分。作业SomeDataReadoutJob
(不得同时执行[disallowConcurrentExecution]
)用于从某处读取数据。我想在多次执行作业时保留 someDouble
中变量的状态(此处:[PersistJobDataAfterExecution]
,JobDataMap
)。为了获得 someDouble
的值,我使用 double someDouble = dataMap.GetDouble("someDouble");
。我知道如何在初始化期间设置值。
IJobDetail job = JobBuilder.Create<SomeDataReadoutJob>()
.WithIdentity("someDataReadoutJob","groupDataReadout")
.UsingJobData("someDouble",0.0)
.Build();
该作业随后被安排为每秒 (.WithIntervalInSeconds(1)
) 并永远运行 (.RepeatForever()
)。
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("dataReadoutTrigger","groupDataReadout")
.StartNow()
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.RepeatForever())
.Build();
StdSchedulerFactory factory = new StdSchedulerFactory();
IScheduler scheduler = await factory.GetScheduler();
await scheduler.Start();
await scheduler.ScheduleJob(job,trigger);
但是我在文档中找不到任何关于如何在作业中设置值的信息。在 GitHub 上,我找到了 seemed to store state leading to dataMap["someDouble"] = someDouble;
的 Quartz 工作。但是状态只更新一次:0.0
,0.1
,...
[disallowConcurrentExecution]
[PersistJobDataAfterExecution]
public class SomeDataReadoutJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
try
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
double someDouble = dataMap.GetDouble("someDouble");
// State should be preserved across job executions and the print statement print accordingly (0.0,0.1,...).
await Console.Out.WriteLineAsync($"{someDouble}");
// Mutate the state of someDouble.
someDouble =+ 0.1;
// How can I write the mutated state back into the dataMap?
// I've tried
// dataMap.Put("someDouble",someDouble);
// as well as
// dataMap["someDouble"] = someDouble;
// but the state was updated only once: 0.0,...
}
catch
{
throw new JobExecutionException();
}
}
}
如何在 JobDataMap
中设置值以在作业执行期间保留它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)