简述
触发器执行任务时存在数个阶段,利用侦听器可以在对应的阶段执行一些代码
如何侦听
1.实现ITriggerListener接口,并实现其函数,具体说明见代码注释
cs
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.为调度器添加侦听器
cs
public class TriggerListenerGetter
{
private static readonly DeleteAfterCompleted listener = new();
public static ITriggerListener GetListener()
{
return listener;
}
}
cs
IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
scheduler.ListenerManager.AddTriggerListener(TriggerListenerGetter.GetListener());