using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using PARR.Master.Services; using PARR.Master.Settings; namespace PARR.Master { internal class Master : IMaster { private readonly WorkerSettings settings; private readonly ILogger logger; private readonly IServiceProvider serviceProvider; public Master( WorkerSettings settings, ILogger logger, IServiceProvider serviceProvider ) { this.settings = settings; this.logger = logger; this.serviceProvider = serviceProvider; } public async Task StartAsync() { logger.LogInformation("Запуск сервиса."); var nextStart = DateTime.Now; while (true) { if (nextStart.Hour == DateTime.Now.Hour && nextStart.Minute == DateTime.Now.Minute) { logger.LogInformation("Запуск по расписанию."); await ManageOrdersAsync(); nextStart = DateTime.Now.Add(settings.RepeatEvery); logger.LogInformation($"Следующая дата запуска: {nextStart}"); } // Каждую минуту await Task.Delay(60 * 1000); } } private async Task ManageOrdersAsync() { using (var scope = serviceProvider.CreateScope()) { var orderMasterService = scope.ServiceProvider.GetService(); if (orderMasterService == null) throw new Exception("Не смог получить серивс IOrderMasterService, scope.ServiceProvider.GetService()"); await orderMasterService.ManageOrdersAsync(); } } } }