1. 程式人生 > 實用技巧 >在ASP.NET CORE Web API 中使用Quartz.Net 執行定時任務

在ASP.NET CORE Web API 中使用Quartz.Net 執行定時任務

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
這樣子,一般情況下程式池就不會被自動回收了,後臺一些簡單的計算執行緒就會正常工作