58 lines
1.4 KiB
C#
58 lines
1.4 KiB
C#
using Quartz;
|
|
using Quartz.Impl;
|
|
|
|
namespace Server.System
|
|
{
|
|
public abstract class Scheduler : IJob
|
|
{
|
|
|
|
public abstract void Process();
|
|
public async Task Execute(IJobExecutionContext context)
|
|
{
|
|
Process();
|
|
}
|
|
}
|
|
|
|
public class Schedule<T> where T : Scheduler
|
|
{
|
|
private StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
|
|
private IScheduler scheduler;
|
|
|
|
private string jobName;
|
|
private string group;
|
|
private string triggerName;
|
|
private string cron;
|
|
|
|
public Schedule(string jobName, string group, string triggerName, string cron)
|
|
{
|
|
this.jobName = jobName;
|
|
this.group = group;
|
|
this.triggerName = triggerName;
|
|
this.cron = cron;
|
|
}
|
|
|
|
public async Task Start()
|
|
{
|
|
scheduler = await schedulerFactory.GetScheduler();
|
|
|
|
await scheduler.Start();
|
|
|
|
IJobDetail job = JobBuilder.Create<T>()
|
|
.WithIdentity(jobName, group)
|
|
.Build();
|
|
|
|
ITrigger trigger = TriggerBuilder.Create()
|
|
.WithIdentity(triggerName, group)
|
|
.StartNow()
|
|
.WithCronSchedule(cron)
|
|
.Build();
|
|
|
|
await scheduler.ScheduleJob(job, trigger);
|
|
}
|
|
public async Task Stop()
|
|
{
|
|
await scheduler.Shutdown();
|
|
}
|
|
}
|
|
}
|