1、介紹:Quartz.Net主要是用來做一些周期性的工作,或者定時工作。比如每天凌晨2點執行某個方法或者調用某個接口。
2、在NuGet 包管理器中安裝,搜索Quartz 安裝
3、需要使用定時任務的類實現IJob接口(任務類),比如我要定時執行發送郵件 代碼如下:
public class WorkAbnormalAppService : IJob { /// <summary> /// 實現定時接口 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task Execute(IJobExecutionContext context) {
//你需要定時執行的任務 SendEmail email = new SendEmail(); string[] emailList = new string[] { "1586693437@qq.com"}; foreach (var item in emailList) { email.Send_Email("定時郵件提醒", "BUG處理", item); } } }
4、創建一個任務調度的類 (任務調度類)
IJobDetail job_Work = JobBuilder.Create<WorkAbnormalAppService>() 中的 WorkAbnormalAppService填你的任務類名
namespace WAP.WorkAbnormals { public class JobSchedulerWork { public static async void Work() { //調度器工廠 ISchedulerFactory Work = new StdSchedulerFactory(); //調度器 IScheduler schedulers_work = await Work.GetScheduler(); await schedulers_work.GetJobGroupNames(); /*-------------計划任務代碼實現------------------*/ //創建任務 IJobDetail job_Work = JobBuilder.Create<WorkAbnormalAppService>() .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(1200).RepeatForever()).Build(); //添加任務及觸發器至調度器中 await schedulers_work.ScheduleJob(job_Work, trigger9); /*-------------計划任務代碼實現------------------*/ //啟動 await schedulers_work.Start(); } } }
5、然后到 Startup.cs 類中設置一下;(我這用的是asp.net core web api)
public IServiceProvider ConfigureServices(IServiceCollection services) { // 定時執行考勤異常方法 JobSchedulerWork.Work(); }
6 、考慮到IIS服務器的回收機制,需要設置一下IIS回收
在IIS中找到這個站點所用的程序池,點擊“高級設置...” 在打開的列表中更改以下設置:
回收——固定時間間隔(分鍾) 改為 0
——虛擬/專用內存限制(KB) 改為 0
進程模型——閑置超時(分鍾) 改為 0
這樣子,一般情況下程序池就不會被自動回收了,后台一些簡單的計算線程就會正常工作
這樣子,一般情況下程序池就不會被自動回收了,后台一些簡單的計算線程就會正常工作
