使用Api执行周期性任务
- 第一种,无图形化界面
- 1.新建类,继承IJob,在实现的方法种书写需要周期性执行的事件。
- 2.编写方法类,定义事件执行方式
- 3.在启动方法中,进行设置,.net 6中在program.cs的Main方法中(可以在启动类中进行启动)
- 4.考虑到IIS服务器的回收机制,需要设置一下IIS回收
第一种,无图形化界面
新建asp.net core webapi项目,使用Nuget搜索安装Quartz包。
1.新建类,继承IJob,在实现的方法种书写需要周期性执行的事件。
public class TimerWorker : IJob
{
public async Task Execute(IJobExecutionContext context)
{
//定时任务
TLog.WriteLog("事件执行!");
}
}
2.编写方法类,定义事件执行方式
public class SpecialWork
{
public static async void Work()
{
//调度器工厂
ISchedulerFactory Work = new StdSchedulerFactory();
//调度器
IScheduler schedulers_work = await Work.GetScheduler();
await schedulers_work.GetJobGroupNames();
/*-------------计划任务代码实现------------------*/
//创建任务
IJobDetail job_Work = JobBuilder.Create<TimerWorker>()
.WithIdentity("TimeTriggerddd", "TimeGroupdd")
.Build();
//创建触发器 2点一分时被执行
//时间字符串的解释
//定时执行
ITrigger trigger9 = TriggerBuilder.Create().WithCronSchedule("0 01 02 * * ?").WithIdentity("TimeTriggerddd", "TimeGroupdd").Build();
//每隔多久执行一次 这个是每隔多久执行一遍 多少秒
//ITrigger trigger9 = TriggerBuilder.Create().WithIdentity("TimeTriggerddd", "TimeGroupdd").WithSimpleSchedule(t => t.WithIntervalInSeconds(5).RepeatForever()).Build(); //5=5秒
//添加任务及触发器至调度器中
await schedulers_work.ScheduleJob(job_Work, trigger9);
/*-------------计划任务代码实现------------------*/
//启动
await schedulers_work.Start();
}
}
注意:定时执行时间格式,参考连接:https://www.cnblogs.com/wudequn/p/8506938.html
3.在启动方法中,进行设置,.net 6中在program.cs的Main方法中(可以在启动类中进行启动)
SpecialWork.Work();
4.考虑到IIS服务器的回收机制,需要设置一下IIS回收
在IIS中找到这个站点所用的程序池,点击“高级设置…” 在打开的列表中更改以下设置:
回收——固定时间间隔(分钟) 改为 0
——虚拟/专用内存限制(KB) 改为 0
进程模型——闲置超时(分钟) 改为 0
这样子,一般情况下程序池就不会被自动回收了,后台一些简单的计算线程就会正常工作
除图中标识的内容之外,闲置超时也要设为0