.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