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());
相关推荐
我是唐青枫25 分钟前
C#.NET stackalloc 深入解析:栈上分配、Span 配合与使用边界
c#·.net
一个帅气昵称啊41 分钟前
.Net基于AgentFramework中智能体Agent Skill集成Shell命令实现小龙虾mini版
ai·c#·.net·openclaw
江沉晚呤时1 小时前
深入理解 .NET 9 BackgroundService 生命周期与应用
.net
唯情于酒1 小时前
.Net9通过 IdentityServer4完成认证鉴权
.net
唐青枫1 小时前
深入理解 C#.NET Task.Run:调度原理、线程池机制与性能优化
c#·.net
步步为营DotNet1 小时前
使用.NET 11的Native AOT提升应用性能
java·前端·.net
喵叔哟1 小时前
12-调用OpenAI-API
前端·人工智能·.net
The Shio18 小时前
OptiByte:一个可视化协议设计与多语言代码生成工具
网络·物联网·c#·.net·业界资讯
喵叔哟18 小时前
11-AI基础概念入门
人工智能·.net
我是唐青枫18 小时前
C#.NET Pipelines 深入解析:高性能 IO 管道与零拷贝协议处理实战
c#·.net