c# - 如何处理 Quartz.net 作业执行事件?
问题描述
我创建了一个通用的作业计划管理器类。我在 .net 核心应用程序中使用 Quartz.net 3.0.7。
public class ScheduleManagerManager<TJob> : IScheduleManager where TJob : IJob
{
private readonly string _cronExpression;
private readonly string _jobIdentity;
private readonly string _triggerIdentity;
private IScheduler _scheduler;
private IJobDetail _jobDetail;
private ITrigger _trigger;
public ScheduleManagerManager(string cronExpression)
{
_cronExpression = cronExpression;
_jobIdentity = Guid.NewGuid().ToString();
_triggerIdentity = Guid.NewGuid().ToString();
}
public async Task Run()
{
try
{
_scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await _scheduler.Start();
_jobDetail = JobBuilder.Create<TJob>()
.WithIdentity(_jobIdentity)
.Build();
_trigger = TriggerBuilder.Create()
.WithIdentity(_triggerIdentity)
.StartNow()
.WithCronSchedule(_cronExpression)
.Build();
await _scheduler.ScheduleJob(_jobDetail, _trigger);
}
catch (SchedulerException se)
{
await Console.Out.WriteLineAsync(se.Message);
}
}
public void ShutDown()
{
_scheduler.Shutdown();
}
}
所以我在以下应用程序中很有趣:
var manager1 = new ScheduleManagerManager<MailSender>();
var manager2 = new ScheduleManagerManager<SmsSender>();
我想添加一个事件处理程序以在执行作业后获取作业数据。
var manager1 = new ScheduleManagerManager<MailSender>();
manager1.JobExecuted += OnJobExecuted();
但是 Quartz.net 作业或触发器中没有事件。我该怎么做?
解决方案
但是 Quartz.net 作业或触发器中没有事件。当然是,它们被称为Listener。
只需实施IJobListener
:
public class MyJobListener : IJobListener
{
public string Name () => "MyListener";
public Task JobToBeExecuted(IJobExecutionContext context){ }
public Task JobExecutionVetoed(IJobExecutionContext context){ }
public Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
// Do after Job stuff....
}
}
并将其添加到您的调度程序中ScheduleManagerManager
:
var myJobListener = new MyJobListener();
_scheduler.ListenerManager.AddJobListener(myJobListener, GroupMatcher<JobKey>.AnyGroup());
推荐阅读
- python - Python不抛出错误或异常,websocket on_message
- azure-functions - 使用 Quarkus 将功能超时部署到 Azure
- php - Api 平台处理文件上传
- python - 如何将某些行增加 1 Python
- outlook - 如何使用 Office 的诊断 API
- sql - SQL COUNT 项目和 GROUP 超过多个类别,缺少条目的总数为 0
- javascript - 没有分配功能的 Web Sockets 对象
- c# - .NET 中的 Google Analytics API UserActivity
- python - 我的 python 乌龟位于正确的坐标上,我的 if 语句返回为真,但我的 if 语句没有返回为真
- flutter - SingleChildScrollView 内的 Flutter ListView.Builder 不可滚动