c#quartz触发_C# 定时调度之Quartz

工作中我们经常碰到定时或者固定时间点去做一些事情,然后每天到时间点就会去做这样的事情,如果理解这样的场景,我们就要引入今天我们的主角Quartz,其实这个跟数据库的作业类似,但是不仅仅局限于数据库。

一: quartZ引入&三大核心对象简介

1:在项目中打开Nuget管理,然后搜索QuartZ,现在最新的版本是3.0.7,需要在Framework4.5.2上面使用。

2:quartZ的三大核心对象

A:IScheduler:单元/实例,在这里去完成定时任务的配置,只有单元启动,里面的作业才能正常运行

B:IJob:任务,定时执行动作就是Job

C:ITrigger:定时策略(设置执行的频率或者执行方式)

二:三大核心对象的初始化以及使用如下:

#region schedulerConsole.WriteLine("初始化scheduler......");

StdSchedulerFactory factory= newStdSchedulerFactory();

IScheduler scheduler= awaitfactory.GetScheduler();//scheduler.ListenerManager.AddSchedulerListener(new CustomSchedulerListener());//scheduler.ListenerManager.AddTriggerListener(new CustomTriggerListener());//scheduler.ListenerManager.AddJobListener(new CustomJobListener());

awaitscheduler.Start();#endregion

//IJob ITrigger

{//创建作业

IJobDetail jobDetail = JobBuilder.Create()

.WithIdentity("testjob", "group1")

.WithDescription("This is TestJob")

.Build();//IJobDetail jobDetail = JobBuilder.Create()//.WithIdentity("testjob", "group1")//.WithDescription("This is TestJob")//.Build();

jobDetail.JobDataMap.Add("student1", "Milor");

jobDetail.JobDataMap.Add("student2", "心如迷醉");

jobDetail.JobDataMap.Add("student3", "宇洋");

jobDetail.JobDataMap.Add("Year", DateTime.Now.Year);//ITrigger trigger = TriggerBuilder.Create()//.WithIdentity("trigger1", "group1")//.StartNow()//.WithSimpleSchedule(x => x//.WithIntervalInSeconds(10)//.WithRepeatCount(10)//.RepeatForever())//.WithDescription("This is testjob's Trigger")//.Build();//创建时间策略

ITrigger trigger =TriggerBuilder.Create()

.WithIdentity("testtrigger1", "group1")

.StartAt(new DateTimeOffset(DateTime.Now.AddSeconds(10)))//.StartNow()//StartAt

.WithCronSchedule("5/10 * * * * ?")//每隔一分钟//"10,20,30,40,50,0 * * * * ?"

.WithDescription("This is testjob's Trigger")

.Build();

trigger.JobDataMap.Add("student4", "Ray");

trigger.JobDataMap.Add("student5", "心欲无痕");

trigger.JobDataMap.Add("student6", "风在飘动");

trigger.JobDataMap.Add("Year", DateTime.Now.Year + 1);awaitscheduler.ScheduleJob(jobDetail, trigger);

Console.WriteLine("scheduler作业添加完成......");

}

[PersistJobDataAfterExecution] //执行后可以保留执行结果

[DisallowConcurrentExecution] // 让一个任务执行完毕以后 才去执行下一个任务

public classTestJob : IJob

{publicTestJob()

{

Console.WriteLine("This is TestJob的构造。。。");

}public asyncTask Execute(IJobExecutionContext context)

{await Task.Run(() =>{

Console.WriteLine();

Console.WriteLine("*****************************");

{

JobDataMap dataMap=context.JobDetail.JobDataMap;

Console.WriteLine(dataMap.Get("student1"));

Console.WriteLine(dataMap.Get("student2"));

Console.WriteLine(dataMap.Get("student3"));

Console.WriteLine(dataMap.GetInt("Year"));

}

Console.WriteLine(

你可能感兴趣的:(c#quartz触发)