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.
64 lines
2.1 KiB
64 lines
2.1 KiB
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using Tiobon.Core.Common;
|
|
using Tiobon.Core.IServices;
|
|
using Tiobon.Core.Tasks;
|
|
|
|
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;
|
|
}
|
|
} |