.net 定時任務調度


前段時間開發個項目需要自定義時間定時發送郵件,此處使用了Quartz 定時任務,在此記錄下:

        /// <summary>
        /// 創建定時任務 
        /// </summary>
        /// <param name="checkData">報告生成時間</param>
        /// <param name="timer">報告發送使勁</param>
        public void CreateTimingJob(DateTime checkData, DateTime timer)
        {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler scheduler = sf.GetScheduler();//創建調度實例
            //job 名稱 命名規則:JobSendEmailTimer+ 報告生成時間
            string JobName = "JobSendEmailTimer" + checkData.ToShortDateString().ToString();
            //創建任務實例
            IJobDetail job = JobBuilder.Create<SendEmailJob>().WithIdentity(JobName, "JobSendEmailTimer").
                UsingJobData("reportGenerationDate", checkData.ToShortDateString()) //傳參 
                .Build();
            var seconds=timer.Second;
            var minutes = timer.Minute;
            var hours = timer.Hour;
            var day = timer.Day;
            var month = timer.Month;
            var year = timer.Year;

            var timerSetting = seconds + " " + minutes + " " + hours + " " + day + " " + month + " " + "? " + year;
            // 0 0 0 0 0 0 0 秒 分 時 日 月 周 年
            ITrigger trigger = TriggerBuilder.Create().StartAt(DateTime.Now.AddSeconds(0)).WithCronSchedule(timerSetting).Build();
            scheduler.ScheduleJob(job,trigger);
            scheduler.Start();
            
        }
  public class SendEmailJob:IJob
    {
        public void Execute(IJobExecutionContext context)
        {

            //獲取傳入的參數數據
            string data = context.MergedJobDataMap.GetString("reportGenerationDate");

            ReportController reportController = new ReportController();

            reportController.SendEmailTimer(data);
        }

    }
        //刪除定時任務
        public ApiResult<string> Delete(int id)
        {
            if (id > 0)
            {
                var result = DeleteEntity(id);
                //在這里獲取數據庫定時任務配置記錄
                var sql = $@"select * from TimerConfig s where s.Id={id}";
                var timerResult= DbHelper.GetModel<TimerConfig>(sql);
                if (timerResult != null)
                {
                    //job 命名規則
                    var JobName = "JobSendEmailTimer"+timerResult.ReportGeneratedDate.ToShortDateString().ToString();//

                    TriggerKey triggerKey = new TriggerKey(JobName, "JobSendEmailTimer");
                    ISchedulerFactory sf = new StdSchedulerFactory();
                    IScheduler scheduler = sf.GetScheduler();
                    scheduler.PauseTrigger(triggerKey);//停止觸發器
                    scheduler.UnscheduleJob(triggerKey);//移除觸發器
                    scheduler.DeleteJob(new JobKey(JobName, "JobSendEmailTimer"));//刪除任務
                }

                return result;
            }
            return ApiResult<string>.Failed("刪除失敗!");
        }

 


免責聲明!

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



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