【发布时间】:2014-10-06 23:49:45
【问题描述】:
有几篇关于此的 SO 文章,但只有一篇 directly addresses this issue。但是,该解决方案对我来说没有意义。我用的是直弦。
更新:
这个:
[PersistJobDataAfterExecution]
public class BackgroundTaskTester : IJob
{
public void Execute(IJobExecutionContext context)
{
Debug.WriteLine("Value Is: " + context.Trigger.JobDataMap["field1"] as string);
context.Trigger.JobDataMap["field1"] = DateTimeOffset.Now.ToString();
}
}
输出:
Value Is:
Value Is:
Value Is:
Value Is:
Value Is:
Value Is:
Value Is:
但是这个:
[PersistJobDataAfterExecution]
public class BackgroundTaskTester : IJob
{
public void Execute(IJobExecutionContext context)
{
Debug.WriteLine("Value Is: " + context.JobDetail.JobDataMap["field1"] as string);
context.JobDetail.JobDataMap["field1"] = DateTimeOffset.Now.ToString();
}
}
输出:
Value Is: 10/6/2014 9:26:23 AM -05:00
Value Is: 10/6/2014 9:26:28 AM -05:00
Value Is: 10/6/2014 9:26:33 AM -05:00
但是,我想将内容存储在 触发器 中。如何让触发器持续存在?
原始问题:
我有一堂课:
[PersistJobDataAfterExecution]
public class BackgroundTaskNotification : IJob
{
public void Execute(IJobExecutionContext context)
{
<see below>
}
}
以下代码未按预期运行:
public void Execute(IJobExecutionContext context)
{
string x = context.MergedJobDataMap["field1"];
context.Put("field1", "test string");
string y = context.MergedJobDataMap["field1"];
// PROBLEM: x != y
}
我试过context.JobDetail.JobDataMap.Put() 和context.Trigger.JobDataMap.Put() 他们都没有更新 MergedJobDataMap。
也许没关系。 JobDetail 对象和 Trigger 上有一个 JobDataMap。我想要做的是:
public void Execute(IJobExecutionContext context)
{
string x = context.MergedJobDataMap["field1"]; //get last x
<do something with x>
context.Put("field1", x); //save updated x
}
我正在尝试对 x 做一些事情,并让 x 在运行之间保持不变。
我不确定它是否相关,但我会补充一点,当我创建作业时,我实际上将field1 放入了触发器的JobDataMap。这是因为我有一个 Job 和多个触发器。我希望数据存储在跳跳虎级别。
【问题讨论】:
-
您的第一个代码 sn-p 似乎是正确的...您提取当前值,将其设置为不同的值(我假设“测试字符串”不是您在此类之外设置的值) ,然后您声称存在问题,因为 x != y。这就是我所期望的行为......自从我改变它以来,x 和 y 是不相等的。
-
我更新了问题。如果我按照您所说的方式将内容存储在 JobDetail 中,但在触发器中失败。
标签: c# quartz.net