-
安装quartznet包
-
添加任务调度类以及Hostedservice类
新建类HostedService,继承IHostedService接口reocde是新的类,可以使用class就行
public record HostedService:IHostedService
{
private SchedulerCenter schedulerCenter=SchedulerCenter.GetSchedulerCenter();
public async Task StartAsync(CancellationToken cancellationToken)
{
await schedulerCenter.StartScheduleAsync();
await schedulerCenter.AddSchedulerJob();
}
public Task StopAsync(CancellationToken cancellationToken)
{
Console.WriteLine("程序结束");
return Task.CompletedTask;
}
}
新建类 SchedulerCenter 用于任务调度,SchedulerCenter 为单例
public class SchedulerCenter
{
/// <summary>
/// 调度器 单例模式
/// </summary>
private IScheduler scheduler;
private static SchedulerCenter schedulerCenter;
JobKey jobKey = new JobKey("mio");
private SchedulerCenter()
{
}
public static SchedulerCenter GetSchedulerCenter()
{
if (schedulerCenter == null)
{
schedulerCenter = new SchedulerCenter();
}
return schedulerCenter;
}
/// <summary>
/// 开启调度器
/// </summary>
/// <returns></returns>
public async Task<bool> StartScheduleAsync()
{
StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();
if (scheduler == null)
{
scheduler = await schedulerFactory.GetScheduler();
}
//开启调度器
if (scheduler.InStandbyMode)
{
await scheduler.Start();
Console.WriteLine("任务调度启动");
}
return scheduler.InStandbyMode;
}
/// <summary>
/// 创建作业
/// </summary>
/// <returns></returns>
public async Task AddSchedulerJob()
{
//创建作业和触发器
var jobDetail = JobBuilder.Create<BateJob>()
.WithIdentity(jobKey.Name)
.Build();
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(m =>
{
m.WithRepeatCount(30000).WithIntervalInSeconds(2);
})
.Build();
//添加调度
await scheduler.ScheduleJob(jobDetail, trigger);
}
/// <summary>
/// 恢复运行
/// </summary>
/// <returns></returns>
public async Task ResumeJob()
{
try
{
if (await scheduler.CheckExists(jobKey))
{
await scheduler.ResumeJob(jobKey);
Console.WriteLine(string.Format("任务“{0}”恢复运行", jobKey.Name));
}
else
{
Console.WriteLine("任务{0}不存在", jobKey.Name);
}
}
catch (Exception ex)
{
Console.WriteLine("任务恢复失败");
}
}
public async Task StopJob()
{
try
{
if (await scheduler.CheckExists(jobKey))
{
await scheduler.PauseJob(jobKey);
Console.WriteLine(string.Format("任务“{0}”停止运行", jobKey.Name));
}
else
{
Console.WriteLine("任务{0}不存在", jobKey.Name);
}
}
catch (Exception ex)
{
Console.WriteLine("任务停止失败");
}
}
}
- 将类注册到 Hostedservice
services.AddHostedService<HostedService>();
讲执行模式从IIS更换到项目名,方便打印控制台信息调试