Запустить сервис в первый рабочий день месяца
Пытаюсь с помощью QuartZ запустить сервис раз в месяц, а конкретно в 1,2 или 3 числе(в рабочий день), с помошью функций var workingDay = _pik.GetWorkingDay(DateTime.Now); можно узнать рабочий или нет день.
Как это сделать ?
internal class SmsSenderJob : IJob
{
private static readonly CancellationTokenSource cancellationToken = new CancellationTokenSource();
private readonly double amount = 5;
private readonly HttpClient _client = new HttpClient();
private readonly IPik _pik;
private readonly ILogger<SmsSenderJob> _logger;
public SmsSenderJob(IPik pik, ILogger<SmsSenderJob> logger)
{
_logger = logger;
_pik = pik;
}
public async Task Execute(IJobExecutionContext context)
{
Console.Writline("Hello");
}
}
public class JobsScheduler
{
private readonly IScheduler _scheduler;
private ILogger _logger;
private IPik _pik;
private IServiceCollection Services { get; }
private IServiceProvider Provider { get; }
public JobsScheduler(IPik _pik)
{
_pik= pik;
Services = new ServiceCollection();
Provider = Services.BuildServiceProvider();
NameValueCollection props = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
StdSchedulerFactory factory = new StdSchedulerFactory(props);
_scheduler = factory.GetScheduler().Result;
IConfigurationBuilder builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", false, true);
IConfigurationRoot configuration = builder.Build();
}
public async Task Start()
{
try
{
var workingDay = _pik.GetWorkingDay(DateTime.Now);
await _scheduler.Start();
IJobDetail job = JobBuilder.Create<SmsSenderJob>().Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("asd", "dfgfd")
.StartNow()
.WithSimpleSchedule(x => x.WithIntervalInMinutes(1)
.RepeatForever())
.Build();
await _scheduler.ScheduleJob(job, trigger);
}
catch (Exception ex)
{
_logger.LogError(ex, "Error while trying to start scheduler");
}
}
}