.Net core使用Quartz.Net 實現定時任務


    很多情況下,我們需要完成一些定時執行的功能,用很多定時工具,像:hangfire,TimeJob,以及Quartz.net,不過quartz.net 比較精確一些,功能也比較強大,所以我選擇了Quart.net,Quartz.net更新之后就支持.net core 了,非常強大的定時工具之一。

使用Quartz.net之前,我們需要引入Nuget包,在Nuget包管理器中搜索Quartz,點擊安裝就可以了,當然也可以在包控制台里輸入

Install-Package Quartz

安裝成功之后,我們需要一個定義job類去實現我們的觸發器,如下:

    using Quartz;
    using Quartz.Impl;

    public class QuartzJob
    {
        public static async void CreateJob(string name, string group, string cron)
        {
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
            IScheduler scheduler = await schedulerFactory.GetScheduler();
            
            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now,1);
            DateTimeOffset endTime = DateBuilder.NextGivenMinuteDate(DateTime.Now, 10);

            IJobDetail job = JobBuilder.Create<QuartzTest>()
                             .WithIdentity(name,group)
                             .Build();

            ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create()
                                       .StartAt(startTime)
                                       .EndAt(endTime)
                                       .WithIdentity(name, group)
                                       .WithCronSchedule(cron)
                                       .Build();

            await scheduler.ScheduleJob(job, cronTrigger);
            await scheduler.Start();
        }
    }

首先別忘了引用命名空間

using Quartz;  using Quartz.Impl;

然后這里有三個參數,name和group 是這個job也就是這個定時任務的身份標識,而cron則是你想要定時的表達式。

cron表達式:從左到右分別為:秒 分 小時 月份中的日期 月份 星期中的日期 年份 (中間用空格隔開)。其中年份可空。

字段 允許值 允許的特殊字符 
秒 0-59 , - * / 
分 0-59 , - * / 
小時 0-23 , - * / 
日期 1-31 , - * ? / L W C 
月份 1-12 或者 JAN-DEC , - * / 
星期 1-7 或者 SUN-SAT , - * ? / L C # 
年(可選) 留空, 1970-2099 , - * / 

參考:原文:https://blog.csdn.net/weixin_40426638/article/details/78959972

然后我們需要定義一個類去實現我們觸發器要執行的方法。也就是我們要實現的功能,如下:

  public class QuartzTest : IJob
    {
        /// <summary>
        /// 觸發器觸發之后執行的方法
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async  Task Execute(IJobExecutionContext context)
        {
            string path = @"C:\Users\win 10\Desktop\1.txt";
            string value = DateTime.Now.ToString();
            if (File.Exists(path))
            {
                File.Delete(path);
            }
            StreamWriter streamWriter = new StreamWriter(path,true);
            await streamWriter.WriteLineAsync(value);            
            streamWriter.Flush();
            streamWriter.Close();
        }
    }

當然別忘了引入

using Quartz; 

這里注意必需要用到異步方法。這里實現的就是你想要實現的方法了。

總的來說,Quart.Net使用非常方便,而且功能十分強大。如有錯誤,歡迎指正,謝謝!

 


免責聲明!

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



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