在ASP.NET CORE Web API 中使用Quartz.Net 執行定時任務
阿新 • • 發佈:2020-08-08
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[] { "[email protected]"}; 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這樣子,一般情況下程式池就不會被自動回收了,後臺一些簡單的計算執行緒就會正常工作