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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#定时任务的简单使⽤最近做了⼀个定时执⾏任务的软件。

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

我做的是每天的9点和16点执⾏⼀次任务,以此记录:
⾸先,获得,
其实可以使⽤vs2015的Nuget管理器,下载。

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

这是QuartzHelper的代码:
1using Quartz;
2using Quartz.Impl;
3
4namespace Cong.Utility
5 {
6public class QuartzHelper
7 {
8///<summary>
9///时间间隔执⾏任务
10///</summary>
11///<typeparam name="T">任务类,必须实现IJob接⼝</typeparam>
12///<param name="seconds">时间间隔(单位:毫秒)</param>
13public static void ExecuteInterval<T>(int seconds) where T : IJob
14 {
15 ISchedulerFactory factory = new StdSchedulerFactory();
16 IScheduler scheduler = factory.GetScheduler();
17
18//IJobDetail job = JobBuilder.Create<T>().WithIdentity("job1", "group1").Build();
19 IJobDetail job = JobBuilder.Create<T>().Build();
20
21 ITrigger trigger = TriggerBuilder.Create()
22 .StartNow()
23 .WithSimpleSchedule(x => x.WithIntervalInSeconds(seconds).RepeatForever())
24 .Build();
25
26 scheduler.ScheduleJob(job, trigger);
27
28 scheduler.Start();
29 }
30
31///<summary>
32///指定时间执⾏任务
33///</summary>
34///<typeparam name="T">任务类,必须实现IJob接⼝</typeparam>
35///<param name="cronExpression">cron表达式,即指定时间点的表达式</param>
36public static void ExecuteByCron<T>(string cronExpression) where T : IJob
37 {
38 ISchedulerFactory factory = new StdSchedulerFactory();
39 IScheduler scheduler = factory.GetScheduler();
40
41 IJobDetail job = JobBuilder.Create<T>().Build();
42
43//DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
44//DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3);
45
46 ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
47//.StartAt(startTime).EndAt(endTime)
48 .WithCronSchedule(cronExpression)
49 .Build();
50
51 scheduler.ScheduleJob(job, trigger);
52
53 scheduler.Start();
54
55//Thread.Sleep(TimeSpan.FromDays(2));
56//scheduler.Shutdown();
57 }
58 }
59
60#region任务执⾏例
61//public class MyJob : IJob
62//{
63// public void Execute(IJobExecutionContext context)
64// {
65// Console.WriteLine("executed..." + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
66// }
67//}
68#endregion
69 }
⼤概的过程是这样的:
通过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:⼩时,逗号分隔
如果需要更详细的说明,可以百度。

相关文档
最新文档