【发布时间】:2019-12-02 19:32:10
【问题描述】:
我创建了一个通用的作业计划管理器类。我在 .net 核心应用程序中使用 Quartz.net 3.0.7。
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();
}
}
所以我在以下应用程序中对此很感兴趣:
var manager1 = new ScheduleManagerManager<MailSender>();
var manager2 = new ScheduleManagerManager<SmsSender>();
我想添加一个事件处理程序以在执行作业后获取作业数据。
var manager1 = new ScheduleManagerManager<MailSender>();
manager1.JobExecuted += OnJobExecuted();
但 Quartz.net 作业或触发器中没有事件。我该怎么做?
【问题讨论】:
-
您使用多个调度程序有什么具体原因吗?
-
不,没有理由,但我是quartz.net 的新手。实际上我想在我的 wpf 应用程序中创建一个 JobViewModel。我将向用户显示所有工作状态。例如作业开始、上次运行时间等。
标签: c# quartz-scheduler quartz.net quartz.net-3.0