专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C# Quartz.Net 定时任务的简单使用

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:09:53       共计:3626 浏览

最近做了一个定时执行任务的软件。

执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象。

我做的是每天的9点和16点执行一次任务,以此记录:

 

首先,获得Quartz.Net,

其实可以使用vs2015的Nuget管理器,下载。

 

我做了一个QuartzHelper,但是在主程序中,还是需要其他代码的。

这是QuartzHelper的代码:

using Quartz;

using Quartz.Impl;

namespace Cong.Utility
{
    public class QuartzHelper
    {
        /// <summary>
        /// 时间间隔执行任务
        /// </summary>
        /// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
        /// <param name="seconds">时间间隔(单位:毫秒)</param>
        public static void ExecuteInterval<T>(int seconds) where T : IJob
        {
            ISchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = factory.GetScheduler();

            //IJobDetail job = JobBuilder.Create<T>().WithIdentity("job1", "group1").Build();
            IJobDetail job = JobBuilder.Create<T>().Build();

            ITrigger trigger = TriggerBuilder.Create()
                .StartNow()
                .WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever())
                .Build();

            scheduler.ScheduleJob(job, trigger);

            scheduler.Start();
        }

        /// <summary>
        /// 指定时间执行任务
        /// </summary>
        /// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
        /// <param name="cronExpression">cron表达式,即指定时间点的表达式</param>
        public static void ExecuteByCron<T>(string cronExpression) where T : IJob
        {
            ISchedulerFactory factory = new StdSchedulerFactory();
            IScheduler scheduler = factory.GetScheduler();

            IJobDetail job = JobBuilder.Create<T>().Build();

            //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
            //DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3);

            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                //.StartAt(startTime).EndAt(endTime)
                .WithCronSchedule(cronExpression)
                .Build();

            scheduler.ScheduleJob(job, trigger);

            scheduler.Start();

            //Thread.Sleep(TimeSpan.FromDays(2));
            //scheduler.Shutdown();
        }
    }

    #region 任务执行例
    //public class MyJob : IJob
    //{
    //    public void Execute(IJobExecutionContext context)
    //    {
    //        Console.WriteLine("executed..." + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
    //    }
    //}
    #endregion

}


大概的过程是这样的:
通过ISchedulerFactory实例化一个计划工厂对象,并使用工厂实例化一个scheduler计划对象,

然后实例化一个任务对象job,也就是定义任务内容的对象,需要传入一个实现IJob接口的类,这里我使用了泛型,

接着,需要一个能触发任务的对象,这里有两种,

一种是ITrigger,这是用于规格时间间隔,计划开始后,会根据间隔的时间值,触发执行任务;

另一种是ICronTrigger,这是通过Cron表达式规格执行的时间,计划开始后,如果时间符合规定时间,就触发执行任务。

最后,把job和trigger都传入计划scheduler,计划开始。

 

最下方的任务执行例是一个例子,

必须实现IJob接口和Execute方法。

 

如果需要在Execute方法内,调用类外部的数据,我是通过在项目中定义静态类的方法,供MyJob调用的。

 

程序开始计划的代码:

string cronExpression = "0 0 9,16 * * ? "; =>这是指每天的9点和16点执行任务
QuartzHelper.ExecuteByCron<MyJob>(cronExpression); =>这是调用Cron计划方法

 

简单说一下Cron表达式吧,

"0 0 9,16 * * ? ",

顺序从左到右

0:秒

0:分

9,16:小时,逗号分隔

 

如果需要更详细的说明,可以百度。

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:C#判断上传文件是否是图片以防止木马上传的方法 | ·下一条:C#定时任务框架Quartz.NET

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有