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());
相关推荐
喵叔哟10 分钟前
16.项目架构设计
后端·docker·容器·.net
唐青枫3 小时前
深入理解 System.Lazy<T>:C#.NET 延迟初始化与线程安全
c#·.net
饼干,1 天前
期末作业1
.net
马达加斯加D1 天前
Web框架 --- .NET中的Options Pattern
前端·flask·.net
小码编匠1 天前
C# 串口通信不再踩坑:一次发送、分包接收的零丢失实战秘籍
后端·c#·.net
唐青枫1 天前
深入理解 Interlocked.CompareExchange:C#.NET 原子操作核心原理
c#·.net
步步为营DotNet2 天前
深度解析.NET 中IServiceCollection:构建可扩展服务体系的关键
java·网络·.net
Zhen (Evan) Wang2 天前
.NET 8 API +Angular 16 + Mysql利用docker compose发布
mysql·.net·angular.js
小码编匠3 天前
工业视觉 C# + OpenCvSharp 的模板匹配实战
后端·c#·.net