在 Quartz.NET 中的作业之间传递信息
Pass information between jobs in Quartz.NET
我有两个 Quartz.NET 工作,偶尔 运行 我需要在它们之间传递信息。我该怎么做?
下面是设置数据的例子class:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PushingJob : IJob
{
public void Execute(IJobExecutionContext context)
{
var keys = context.Scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
foreach (var key in keys)
{
var detail = context.Scheduler.GetJobDetail(key);
if (detail.JobType == typeof(PullingJob))
{
detail.JobDataMap.Put("Foo", "Bar");
}
}
}
}
下面是获取数据的示例:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PullingJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Foo property = " + context.MergedJobDataMap.GetString("Foo"));
}
}
如果您使用的是 DI 引擎,则可以在这两个作业实例之间共享一个实例对象,其中包含一个并发字典。
否则,即使没有 DI 引擎,你也可以在它们之间共享静态并发字典(不太优雅,但它有效):)
例如,注入:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PushingJob : IJob
{
DataObject _data;
// with injection
public PushingJob(DataObject data)
{
_data= data;
}
public void Execute(IJobExecutionContext context)
{
var keys = context.Scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
foreach (var key in keys)
{
var detail = context.Scheduler.GetJobDetail(key);
if (detail.JobType == typeof(PullingJob))
{
data.MyDict.AddOrUpdate("Foo", "Bar");
}
}
}
}
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PullingJob : IJob
{
DataObject _data;
// with injection
public PushingJob(DataObject data)
{
_data= data;
}
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Foo property = " + _data.MyDict.GetOrAdd("Foo"));
}
}
我有两个 Quartz.NET 工作,偶尔 运行 我需要在它们之间传递信息。我该怎么做?
下面是设置数据的例子class:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PushingJob : IJob
{
public void Execute(IJobExecutionContext context)
{
var keys = context.Scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
foreach (var key in keys)
{
var detail = context.Scheduler.GetJobDetail(key);
if (detail.JobType == typeof(PullingJob))
{
detail.JobDataMap.Put("Foo", "Bar");
}
}
}
}
下面是获取数据的示例:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PullingJob : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Foo property = " + context.MergedJobDataMap.GetString("Foo"));
}
}
如果您使用的是 DI 引擎,则可以在这两个作业实例之间共享一个实例对象,其中包含一个并发字典。
否则,即使没有 DI 引擎,你也可以在它们之间共享静态并发字典(不太优雅,但它有效):)
例如,注入:
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PushingJob : IJob
{
DataObject _data;
// with injection
public PushingJob(DataObject data)
{
_data= data;
}
public void Execute(IJobExecutionContext context)
{
var keys = context.Scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
foreach (var key in keys)
{
var detail = context.Scheduler.GetJobDetail(key);
if (detail.JobType == typeof(PullingJob))
{
data.MyDict.AddOrUpdate("Foo", "Bar");
}
}
}
}
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class PullingJob : IJob
{
DataObject _data;
// with injection
public PushingJob(DataObject data)
{
_data= data;
}
public void Execute(IJobExecutionContext context)
{
Console.WriteLine("Foo property = " + _data.MyDict.GetOrAdd("Foo"));
}
}