Quartz.Net_侦听触发器

简述

触发器执行任务时存在数个阶段,利用侦听器可以在对应的阶段执行一些代码

如何侦听

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());
相关推荐
唐青枫21 小时前
C# 泛型数学:解锁真正的类型安全数值运算
c#·.net
追逐时光者21 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 63 期(2025年11.24-11.30)
后端·.net
公子小六2 天前
推荐一种手动设置异步线程等待机制的解决方案
windows·microsoft·c#·.net
zzlyx992 天前
.NET采用Avalonia11+SukiUI6.0.2开发桌面程序常用对话框
.net·avalonia·sukiui
一个帅气昵称啊2 天前
在.NET中如何优雅的使用DotNetCore.CAP实现分布式事务,事件总线和消息最终一致性
分布式·微服务·.net
三天不学习2 天前
Xamarin 与 .NET MAUI:.NET跨平台原生移动App开发前世今生
.net·xamarin·.net maui
a***81392 天前
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
.net
Crazy Struggle2 天前
基于 JSON 配置的 .NET 桌面应用自动更新方案
.net·winform·自动更新
c***87192 天前
【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
开源·.net
唐青枫2 天前
C# 原始字符串字面量全面解析:多行字符串终于优雅了!
c#·.net