【发布时间】:2018-01-24 14:55:05
【问题描述】:
我正在使用 Quartz .NET 进行作业调度。 所以我创建了一个工作类(实现 IJob)。
public class TransferData : IJob
{
public Task Execute(IJobExecutionContext context){
string tableName = context.JobDetail.JobDataMap.Get("table");
// Transfer the table here.
}
}
所以我想转移不同的和多个表。为此,我正在做这样的事情:
foreach (Table table in tables)
{
IJobDetail job = JobBuilder.Create<TransferData>()
.WithIdentity(new JobKey(table.Name, "table_transfer"))
.UsingJobData("table", table.Name)
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(new TriggerKey("trigger_" + table.Name, "table_trigger"))
.WithCronSchedule("*/5 * * * *")
.ForJob(job)
.Build();
await this.scheduler.ScheduleJob(job, trigger);
}
所以每张桌子应该每 5 分钟转移一次。为了实现这一点,我创建了几个具有不同工作名称的工作。 问题是:如何防止同一个jobName的并行作业执行? (例如,一个表的上一次运行需要更长的时间,所以我不想为同一个表开始下一次传输。)
我知道@DisallowConcurrentExecution 属性,但这用于防止同一个Job 类的并行执行。我不想为每个表编写一个额外的 Job 类,因为传输的“主要”代码总是相同的,唯一的区别是表名。所以我想为此目的使用相同的工作类。
【问题讨论】:
标签: parallel-processing quartz-scheduler quartz.net