I usually schedule quartz jobs in the Startup.cs of a .Net.Core App, and the job is alive forever.
In public void ConfigureServices(IServiceCollection services) register factory and scheduler :
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();
IScheduler scheduler = services.BuildServiceProvider().GetService<ISchedulerFactory>().GetScheduler().Result;
services.AddSingleton<IScheduler>(scheduler);
In public async void Configure(IApplicationBuilder app..... schedule the jobs
serviceProvider.GetService<IScheduler>().Start();
Quartz.IScheduler _scheduler = serviceProvider.GetService<Quartz.IScheduler>();
//Define job
IJobDetail job = JobBuilder.CreateForAsync<IJobImplementationXXXXX>()
.WithIdentity("job_namexxxx")
.Build();
//Define trigger
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("trigger_namexxxx")
.StartNow()
.WithSimpleSchedule(x => x
.WithInterval(TimeSpan.FromMilliseconds(PollingIntervalxxxx))
.RepeatForever())
.Build();
//Execute Job
await _scheduler.ScheduleJob(job, trigger);
And of course the IJob implementation that will be exec every PollingInterval
[DisallowConcurrentExecution]
public class IJobImplementationXXXXX: IJob
{
public async Task Execute(IJobExecutionContext context)
{
.....