自动运行功能,永远c# Quartz.net
本文关键字:Quartz net 永远 运行 功能 | 更新日期: 2023-09-27 18:12:18
我在网站上使用Quartz.net永远运行作业,我希望每隔15分钟在服务器上自动运行作业。
我的问题是,用户必须访问网站,直到应用程序开始在全球。asax运行,它的工作,当用户在网站,我想运行作业没有访问网站和启动它永远没有用户在网站
我使用此代码在global.asax中运行作业
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
SchedulerDemo.Interfaces.ISchedule myTask = new SchedulerDemo.Jobs.HelloSchedule();
myTask.Run();
}
默认情况下,作业列表及其触发器将存储在内存中,因此,正如您所怀疑的,它必须在Application_Start中定义,以便在第一个请求时调用。
首先需要获取并启动调度程序本身。
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
然后,仍然在Application_Start方法中,您必须定义作业及其触发器:
// Instantiating the job
IJobDetail jobDetail = JobBuilder.Create<MyJob>()
.WithIdentity(new JobKey("MyVeryImportantJob", "VeryImportantJobGroup"))
.Build();
ITrigger jobTrigger = TriggerBuilder.Create()
.WithIdentity(new TriggerKey("MyVeryImportantJobTrigger", "VeryImportantJobTriggerGroup"))
.WithCronSchedule("* 0/15 * * * ?"") // execute every 15 min (in reality at HH:00, HH:15, HH:30 and HH:45)
.Build();
并将两者连接起来调度作业
scheduler.ScheduleJob(jobDetail, jobTrigger);
调度程序将根据您定义的触发器调用您的作业(在本例中,每15分钟调用一次)。
也叫Quartz。. Net将为调度程序生成一个专用线程,它不会影响iis响应过程,它将防止iis工作线程被回收,所以一旦启动,它将永远运行,直到iis网站或主机服务器重新启动。
之后,如果你真的想让你的调度程序在没有任何请求的情况下启动网站,你可以使用服务自动启动提供商(更多信息在这里:
)https://www.simple-talk.com/blogs/2013/03/05/speeding-up-your-application-with-the-iis-auto-start-feature/)