引入Quartz
作业任务模型
using Quartz;
//持久化JobDataMap传递的参数
[PersistJobDataAfterExecution]
//禁止并发执行
[DisallowConcurrentExecution]
public class TestJob : IJob
{
public void Execute(IJobExecutionContext context)
{
if (context == null)
return;
Console.WriteLine(DateTime.Now);
}
}
加个作业监视器
public class JobListener : IJobListener
{
public string Name { get; set; }
public JobListener()
{
}
public void JobToBeExecuted(IJobExecutionContext context)
{
IJobDetail jobDetail = context.JobDetail;
JobKey jobKey = context.JobDetail.Key;
Console.WriteLine(jobKey.Name);
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
IJobDetail jobDetail = context.JobDetail;
JobKey jobKey = context.JobDetail.Key;
if (jobException != null)
{
Console.WriteLine(String.Format("Task Exception Use Time:{0}\r\n{1}", context.JobRunTime, jobException.Message));
}
Console.WriteLine(context.JobRunTime);
}
public void JobExecutionVetoed(IJobExecutionContext context)
{
JobKey jobKey = context.JobDetail.Key;
Console.WriteLine(jobKey.Name);
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
开始计划任务
IScheduler m_Scheduler = StdSchedulerFactory.GetDefaultScheduler();
JobListener jobListener = new JobListener()
{
Name = "This.JobListener"
};
m_Scheduler.ListenerManager.AddJobListener(jobListener, GroupMatcher<JobKey>.GroupStartsWith("Group"));
m_Scheduler.Start();
IJobDetail job1 = JobBuilder.Create<typeof(TestJob)>()
.WithIdentity("_NAME_", "Group").Build();
ITrigger trigger1 = TriggerBuilder.Create()
//现在开始
.StartNow()
.WithIdentity(Name, "Group")
//间隔10秒 不间断执行
.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
.Build();
//把作业,触发器加入调度器。
m_Scheduler.ScheduleJob(job1, trigger1);