c语言实时调度任务算法实现(C定时任务之Quartz.Net)
c语言实时调度任务算法实现(C定时任务之Quartz.Net)//首先需要先去从nuget下载Quartz引用到我们的项目 //实现IInterruptableJob接口,实现我们需要操作的逻辑 public class MyJob : IInterruptableJob { public void Execute(IJobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; string tag = dataMap.GetString("tag"); Form1.form1.AddText(tag "-------" DateTime.Now); } public void
上一篇写到的使用windows任务计划程序来实现定时任务,但这种方式在开发过程中不是太灵活,很难满足我们时需时用;所以我们如果能在代码中来实现的话就会比较得心应手;
所以这篇来简单介绍下Quartz.Net这个任务调度系统的使用方式。
实现功能:
使用Quartz.Net实现定时、定点触发
开发环境:
开发工具: Visual Studio 2013
.NET Framework版本:4.5
实现代码:
//首先需要先去从nuget下载Quartz引用到我们的项目
//实现IInterruptableJob接口,实现我们需要操作的逻辑
public class MyJob : IInterruptableJob
{
public void Execute(IJobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
string tag = dataMap.GetString("tag");
Form1.form1.AddText(tag "-------" DateTime.Now);
}
public void Interrupt()
{
throw new NotImplementedException();
}
}
public static void StartJob()
{
//创建任务调度器
ISchedulerFactory schedulefactory = new StdSchedulerFactory();
IScheduler scheduler = schedulefactory.GetScheduler();
//启动任务调度器
scheduler.Start();
//创建任务作业
//指定时间触发
IJobDetail jobDetail = JobBuilder.Create<MyJob>().UsingJobData("tag" "jobDetail").Build();
//间隔时间触发
IJobDetail jobDetail2 = JobBuilder.Create<MyJob>().UsingJobData("tag" "jobDetail2").Build();
//创建触发器
DateTime dt = DateTime.Now.AddSeconds(10);
//指定时间触发
//表达式含义可参考:http://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/crontrigger.html
string t = string.Join(" " dt.Second dt.Minute dt.Hour dt.Day dt.Month "?" dt.Year);
var cronTrigger = TriggerBuilder.Create()
.WithSchedule(CronScheduleBuilder.CronSchedule(t).InTimeZone(TimeZoneInfo.Local))
.Build();
//间隔时间段触发
//WithRepeatCount表示重复的次数,第一次执行不算重复次数,所以最终执行次数为设置的重复次数 1
var cronTrigger2 =TriggerBuilder.Create()
.WithSimpleSchedule(s => s.WithIntervalInSeconds(4).WithRepeatCount(3)).Build();
IDictionary<IJobDetail Quartz.Collection.ISet<ITrigger>> dic = new Dictionary<IJobDetail Quartz.Collection.ISet<ITrigger>>();
dic.Add(jobDetail new Quartz.Collection.HashSet<ITrigger> { cronTrigger });
dic.Add(jobDetail2 new Quartz.Collection.HashSet<ITrigger> { cronTrigger2 });
//把作业,触发器加入调度器
scheduler.ScheduleJobs(dic true);
}
//最后调用StartJob方法即可
private void btnQuartz_Click(object sender EventArgs e)
{
StartJob();
}
实现效果:
我这里用winform来做这个测试,当然我认为这并不太合适。
此篇只是介绍了下Quartz.Net简单的使用方法,还有其他更高级的功能大家可以去官网自行学习。
由简入繁,拿来即用
后续精彩,持续关注