1.引用NuGet包,根据项目的.Net Framework选择对应版本即可。本例项目是.Net Framework 4.5.2,选择的Quartz版本是3.0.7
2.项目下新建文件夹TimedTask,下新建SchedulerServer类和TimedCallInspectContentExtractJob类。
SchedulerServer类作为Quartz的服务管理类,TimedCallInspectContentExtractJob是具体一个job工作任务的实现类。
3.补充SchedulerServer内容
public class SchedulerServer
{
private ISchedulerFactory _schedulerFactory;
private IScheduler _scheduler;
public static SchedulerServer CreateInstance()
{
return new SchedulerServer();
}
public virtual async Task Initialize()
{
System.Diagnostics.Debug.WriteLine("开始设置定时执行任务");
_schedulerFactory = new StdSchedulerFactory();
_scheduler = await _schedulerFactory.GetScheduler();
//指定具体的任务job
var job = JobBuilder.Create<TimedCallInspectContentExtractJob>()
.WithIdentity("timedCallInspectContentExtractJob", "group1").Build();
//这个trigger是设置的时间间隔24小时在每天的2:10开始执行任务
//var trigger = TriggerBuilder.Create().WithIdentity("timedCallInspectContentExtractTrigger", "group1").WithDailyTimeIntervalSchedule(x=>x.WithIntervalInHours(24).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(int.Parse("2"),int.Parse("10"))))
// .Build();
//这个trigger是设置的程序启动之后立即执行了一次触发动作,但是后续没有任何触发动作再执行【只执行一次】
//var trigger1 = TriggerBuilder.Create().WithIdentity("timedCallInspectContentExtractTrigger",
// "group1").StartAt(DateTime.UtcNow).StartNow().Build();
//这个trigger是设置的程序启动之后立即执行了一次触发动作,并以时间间隔为2分钟后开始尝试执行触发动作
var trigger1 = TriggerBuilder.Create().WithIdentity("timedCallInspectContentExtractTrigger", "group1").StartAt(DateTime.UtcNow)
.StartNow().WithSimpleSchedule(x => x.WithIntervalInMinutes(2).RepeatForever()).Build();
System.Diagnostics.Debug.WriteLine("定时执行任务设置完成");
await _scheduler.ScheduleJob(job, trigger1);
}
public virtual async Task Start()
{
await _scheduler.Start();
}
public virtual async Task Stop()
{
await _scheduler.Shutdown(true);
}
}
4.补充TimedCallInspectContentExtractJob内容
public class TimedCallInspectContentExtractJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
//编写你的异步代码
}
}
5.设置启动
public class WebApiApplication : System.Web.HttpApplication
{
private readonly SchedulerServer _schedulerServer = SchedulerServer.CreateInstance();
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
StartTimedTask();
}
private void StartTimedTask()
{
Task.Run(async () =>
{
try
{
await _schedulerServer.Initialize();
await _schedulerServer.Start();
System.Diagnostics.Debug.WriteLine("后台开始尝试上传文件到api接口");
}
catch (Exception ex)
{
if (_schedulerServer != null)
{
await _schedulerServer.Stop();
System.Diagnostics.Debug.WriteLine("后台尝试上传文件到api,操作失败,上传任务正在关闭");
}
}
});
}
}