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());
相关推荐
小码编匠17 小时前
C# 编程技巧实现屏幕录制功能
后端·c#·.net
小码编匠17 小时前
C# + WinForm 基于ModBus协议的智能仓储温控管理系统
后端·c#·.net
胖头鱼不吃鱼-17 小时前
AI与.NET技术实操系列:ML.NET篇
人工智能·.net
追逐时光者20 小时前
基于 .NET Blazor 开源、低代码、易扩展的插件开发框架
后端·.net
雾岛听风来2 天前
AI与.NET技术实操系列:ML.NET篇
.net
小码编匠2 天前
.NET 快速开发企业级CMS内容管理系统,告别重复造轮子!
后端·c#·.net
Evan.Pei2 天前
JWT在.NET8 Webapi中的使用
.net
故事里故去2 天前
.net 6.0 webapi支持 xml返回xml json返回json
xml·json·.net
桑榆肖物2 天前
在Linux开发板中使用.NET实现音频开发
linux·.net·音视频
追逐时光者2 天前
一款基于.NET开源、强大的网络管理和网络问题排查工具!
后端·.net