如何在作业中改变 C# Quartz JobDataMap 的状态?

问题描述

我使用 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...