.net core 后台服务BackgroundService联合Quartz.net 定时服务


新建workserver 模板.net core 项目,会生成如下定时服务代码:

while (!stoppingToken.IsCancellationRequested)
{
var guid = Guid.NewGuid();
var time = DateTime.Now;
_logger.LogInformation("xxx  running at: {0},唯一标识:{1}", time, guid);



Thread.Sleep(70000);
_logger.LogInformation("xxx runend at: {0},唯一标识:{1},执行时长:{2}秒", DateTime.Now, guid, (DateTime.Now - time).TotalSeconds);
await Task.Delay(60000, stoppingToken);
}

 

如果我在其中加上如上标红的代码,会出现执行70秒后,在等待60秒才会进行下一次循环执行,没有实现定时执行的效果,所以和 quartz.net 联合使用,如下:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
    
            AutoService.Run();

        }
public static class AutoService
{ public static IScheduler _scheduler; public async static void Run() { Console.WriteLine("Service Start"); if (_scheduler == null) { StdSchedulerFactory factory = new StdSchedulerFactory(); _scheduler = await factory.GetScheduler(); await _scheduler.Start(); IJobDetail job = JobBuilder.Create<XXXXJob>() .WithIdentity("job1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1") .StartNow() .WithSchedule(CronScheduleBuilder.CronSchedule("0 0/1 * * * ? ")) .Build(); // Tell quartz to schedule the job using our trigger await _scheduler.ScheduleJob(job, trigger); } } }
[DisallowConcurrentExecution]
    public  class MonitorWarningJob : IJob
    {

       
        public  async Task Execute(IJobExecutionContext context)
        {}
     }

以上就是简单实现定时任务代码


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM