简述
触发器执行任务时存在数个阶段,利用侦听器可以在对应的阶段执行一些代码
如何侦听
1.实现ITriggerListener接口,并实现其函数,具体说明见代码注释
public class DeleteAfterCompleted : ITriggerListener
{public string Name => "X";// 触发时public async Task TriggerFired(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default){await Console.Out.WriteLineAsync("TriggerFired");await Task.CompletedTask;}// 错过触发时public async Task TriggerMisfired(ITrigger trigger, CancellationToken cancellationToken = default){await Console.Out.WriteLineAsync("TriggerMisfired");await Task.CompletedTask;}// 任务执行前public async Task<bool> VetoJobExecution(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken = default){await Console.Out.WriteLineAsync("VetoJobExecution");return await Task.FromResult(cancellationToken.IsCancellationRequested);}// 任务完成后public async Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode, CancellationToken cancellationToken = default){await Console.Out.WriteLineAsync("TriggerComplete");var scheduler = await SchedulerGetter.GetSchedulerAsync();if (string.IsNullOrEmpty(context.NextFireTimeUtc?.LocalDateTime.ToString())){await scheduler.UnscheduleJob(trigger.Key);await Console.Out.WriteLineAsync("已删除");}}
}
2.为调度器添加侦听器
public class TriggerListenerGetter
{private static readonly DeleteAfterCompleted listener = new();public static ITriggerListener GetListener(){return listener;}
}
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
scheduler.ListenerManager.AddTriggerListener(TriggerListenerGetter.GetListener());