You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

67 lines
2.1 KiB

using System;
using System.Threading;
using System.Threading.Tasks;
using Tiobon.Core.Common;
using Tiobon.Core.IServices;
using Tiobon.Core.Tasks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Tiobon.Core.Extensions.HostedService;
public class QuartzJobHostedService : IHostedService
{
private readonly ITasksQzServices _tasksQzServices;
private readonly ISchedulerCenter _schedulerCenter;
private readonly ILogger<QuartzJobHostedService> _logger;
public QuartzJobHostedService(ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, ILogger<QuartzJobHostedService> logger)
{
_tasksQzServices = tasksQzServices;
_schedulerCenter = schedulerCenter;
_logger = logger;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Start QuartzJob Service!");
await DoWork();
}
private async Task DoWork()
{
try
{
if (AppSettings.app("Middleware", "QuartzNetJob", "Enabled").ObjToBool())
{
var allQzServices = await _tasksQzServices.Query();
foreach (var item in allQzServices)
{
if (item.IsStart)
{
var result = await _schedulerCenter.AddScheduleJobAsync(item);
if (result.Success)
{
Console.WriteLine($"QuartzNetJob{item.Name}启动成功!");
}
else
{
Console.WriteLine($"QuartzNetJob{item.Name}启动失败!错误信息:{result.Message}");
}
}
}
}
}
catch (Exception e)
{
_logger.LogError(e, "An error was reported when starting the job service.");
throw;
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Stop QuartzJob Service!");
return Task.CompletedTask;
}
}