自动运行功能,永远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();
}

自动运行功能,永远c# Quartz.net

默认情况下,作业列表及其触发器将存储在内存中,因此,正如您所怀疑的,它必须在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/

)