I have created a generic job schedule manager class. I am using Quartz.net 3.0.7 in .net core app.
public class ScheduleManagerManager<TJob> : IScheduleManager where TJob : IJob
{
private readonly string _cronExpression;
private readonly string _jobIdentity;
private readonly string _triggerIdentity;
private IScheduler _scheduler;
private IJobDetail _jobDetail;
private ITrigger _trigger;
public ScheduleManagerManager(string cronExpression)
{
_cronExpression = cronExpression;
_jobIdentity = Guid.NewGuid().ToString();
_triggerIdentity = Guid.NewGuid().ToString();
}
public async Task Run()
{
try
{
_scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await _scheduler.Start();
_jobDetail = JobBuilder.Create<TJob>()
.WithIdentity(_jobIdentity)
.Build();
_trigger = TriggerBuilder.Create()
.WithIdentity(_triggerIdentity)
.StartNow()
.WithCronSchedule(_cronExpression)
.Build();
await _scheduler.ScheduleJob(_jobDetail, _trigger);
}
catch (SchedulerException se)
{
await Console.Out.WriteLineAsync(se.Message);
}
}
public void ShutDown()
{
_scheduler.Shutdown();
}
}
So I amusing this in applications like following:
var manager1 = new ScheduleManagerManager<MailSender>();
var manager2 = new ScheduleManagerManager<SmsSender>();
I want to add an event handler to get job data after executed the job.
var manager1 = new ScheduleManagerManager<MailSender>();
manager1.JobExecuted += OnJobExecuted();
But there is no event in Quartz.net jobs or triggers. How can I do it?