gpt4 book ai didi

c# - 在 Quartz.NET 中的作业之间传递信息

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:09 24 4
gpt4 key购买 nike

我有两个偶尔运行的 Quartz.NET 作业,我需要在它们之间传递信息。我该怎么做?

下面是设置数据的示例类:

[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 引擎,你也可以在它们之间共享静态并发字典(不太优雅,但它有效):)

例如,注入(inject):

[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"));
}
}

关于c# - 在 Quartz.NET 中的作业之间传递信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36517643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com