在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[] { "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
  這樣子,一般情況下程序池就不會被自動回收了,后台一些簡單的計算線程就會正常工作

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM