网站建设属于技术开发吗,网络运营有前途吗,晋城网站建设电话,跨境电商平台网站建设广州目录 创建简易控制台定时任务步骤完整程序 创建简易控制台定时任务
创建winform的可以看#xff1a;https://blog.csdn.net/wayhb/article/details/134279205
步骤
创建控制台程序
使用vs2019新建项目#xff0c;控制台程序#xff0c;使用.net4.7.2项目右键#xff08… 目录 创建简易控制台定时任务步骤完整程序 创建简易控制台定时任务
创建winform的可以看https://blog.csdn.net/wayhb/article/details/134279205
步骤
创建控制台程序
使用vs2019新建项目控制台程序使用.net4.7.2项目右键管理NuGet程序包搜索Quartz安装
使用Quartz.Net官网示例运行程序
打开官网https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html#trying-out-the-application在程序入库Program.cs粘贴官网示例
//出现错误右键修复自动添加包
using Quartz;
using Quartz.Impl;
using Quartz.Logging;
using System;
using System.Threading.Tasks;namespace ConsoleSkWork
{class Program{private static async Task Main(string[] args){LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());// Grab the Scheduler instance from the FactoryStdSchedulerFactory factory new StdSchedulerFactory();IScheduler scheduler await factory.GetScheduler();// and start it offawait scheduler.Start();// define the job and tie it to our HelloJob classIJobDetail job JobBuilder.CreateHelloJob().WithIdentity(job1, group1).Build();// Trigger the job to run now, and then repeat every 10 secondsITrigger trigger TriggerBuilder.Create().WithIdentity(trigger1, group1).StartNow().WithSimpleSchedule(x x.WithIntervalInSeconds(10).RepeatForever()).Build();// Tell Quartz to schedule the job using our triggerawait scheduler.ScheduleJob(job, trigger);// some sleep to show whats happeningawait Task.Delay(TimeSpan.FromSeconds(60));// and last shut down the scheduler when you are ready to close your programawait scheduler.Shutdown();Console.WriteLine(Press any key to close the application);Console.ReadKey();}// simple log provider to get something to the console//https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html#trying-out-the-applicationprivate class ConsoleLogProvider : ILogProvider{public Logger GetLogger(string name){return (level, func, exception, parameters) {if (level LogLevel.Info func ! null){Console.WriteLine([ DateTime.Now.ToLongTimeString() ] [ level ] func(), parameters);}return true;};}public IDisposable OpenNestedContext(string message){throw new NotImplementedException();}public IDisposable OpenMappedContext(string key, object value, bool destructure false){throw new NotImplementedException();}}}public class HelloJob : IJob{public async Task Execute(IJobExecutionContext context){await Console.Out.WriteLineAsync(Greetings from HelloJob!);}}
}运行控制台程序 说明 info是日志插件输出的 hellojob就是任务触发的
添加触发监听器
触发监听器是用于监听触发器的添加触发监听器可以在任务执行前后执行其他动作例如输出下一次该任务执行时间触发监听器官网解释https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/trigger-and-job-listeners.html继承触发监听器接口有4个方法需要实现
//触发器执行前
public async Task TriggerFired(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken default)
{}
// 判断作业是否继续true继续false本次不触发
public async Taskbool VetoJobExecution(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken default)
{}
// 触发完成
public async Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode, CancellationToken cancellationToken default)
{}
// 触发失败
public async Task TriggerMisfired(ITrigger trigger, CancellationToken cancellationToken default)
{}
主程序中添加触发监听器 // 将trigger监听器注册到调度器scheduler.ListenerManager.AddTriggerListener(new CustomTriggerListener());完整程序
Program.cs
using System;
using System.Threading.Tasks;using Quartz;
using Quartz.Impl;
using Quartz.Logging;namespace ConsoleApp1
{public class Program{private static async Task Main(string[] args){LogProvider.SetCurrentLogProvider(new ConsoleLogProvider());// Grab the Scheduler instance from the FactoryStdSchedulerFactory factory new StdSchedulerFactory();IScheduler scheduler await factory.GetScheduler();// and start it offawait scheduler.Start();// define the job and tie it to our HelloJob classIJobDetail job JobBuilder.CreateHelloJob().WithIdentity(job1, group1).Build();// Trigger the job to run now, and then repeat every 10 secondsITrigger trigger TriggerBuilder.Create().WithIdentity(trigger1, group1).StartNow().WithSimpleSchedule(x x.WithIntervalInSeconds(10).RepeatForever()).Build();// 将trigger监听器注册到调度器scheduler.ListenerManager.AddTriggerListener(new CustomTriggerListener());// Tell Quartz to schedule the job using our triggerawait scheduler.ScheduleJob(job, trigger);// some sleep to show whats happeningawait Task.Delay(TimeSpan.FromSeconds(60));// and last shut down the scheduler when you are ready to close your programawait scheduler.Shutdown();Console.WriteLine(Press any key to close the application);Console.ReadKey();}// simple log provider to get something to the consoleprivate class ConsoleLogProvider : ILogProvider{public Logger GetLogger(string name){return (level, func, exception, parameters) {if (level LogLevel.Info func ! null){Console.WriteLine([ DateTime.Now.ToLongTimeString() ] [ level ] func(), parameters);}return true;};}public IDisposable OpenNestedContext(string message){throw new NotImplementedException();}public IDisposable OpenMappedContext(string key, object value, bool destructure false){throw new NotImplementedException();}}}public class HelloJob : IJob{public async Task Execute(IJobExecutionContext context){//获取当前时间DateTime currentDateTime DateTime.UtcNow;await Console.Out.WriteLineAsync(当前日期和时间 currentDateTime.AddHours(8));}}
}CustomTriggerListener.cs
using Quartz;
using System;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleApp1
{//继承监听器接口public class CustomTriggerListener : ITriggerListener{public string Name CustomTriggerListener;//触发器执行前public async Task TriggerFired(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken default){Console.WriteLine(【*********************************************】);Console.WriteLine($【{Name}】---【TriggerFired】-【触发】);await Task.CompletedTask;}// 判断作业是否继续true继续false本次不触发public async Taskbool VetoJobExecution(ITrigger trigger, IJobExecutionContext context, CancellationToken cancellationToken default){Console.WriteLine($【{Name}】---【VetoJobExecution】-【判断作业是否继续】-{true});return await Task.FromResult(cancellationToken.IsCancellationRequested);}// 触发完成public async Task TriggerComplete(ITrigger trigger, IJobExecutionContext context, SchedulerInstruction triggerInstructionCode, CancellationToken cancellationToken default){Console.WriteLine($【{Name}】---【TriggerComplete】-【触发完成】);//获取下次执行日期时间UTC将UTC时间转换成北京时间DateTimeOffset dd (DateTimeOffset)trigger.GetNextFireTimeUtc();Console.WriteLine(【下次执行时间】dd.DateTime.AddHours(8));await Task.CompletedTask;}// 触发失败public async Task TriggerMisfired(ITrigger trigger, CancellationToken cancellationToken default){Console.WriteLine($【{Name}】---【TriggerMisfired】【触发作业】);await Task.CompletedTask;}}}