using PARR.AIHITMainSyncer; namespace PARR.AIHITSyncerWorker { public class Worker : BackgroundService { private readonly ILogger _logger; private readonly IAihitMainSyncer aihitSyncer; public Worker(ILogger logger, IAihitMainSyncer aihitSyncer) { _logger = logger; this.aihitSyncer = aihitSyncer; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { //await aihitSyncer.StartAsync(); //await Task.Delay(Timeout.Infinite, stoppingToken); while (!stoppingToken.IsCancellationRequested) { try { await aihitSyncer.StartAsync(); await Task.Delay(Timeout.Infinite, stoppingToken); // Если StartAsync завершается (а не висит в вечном ожидании), // то, вероятно, нужно добавить Task.Delay или break. // Но судя по коду — StartAsync — это долгоживущая подписка, // значит, он **не должен завершаться** без исключения. // Поэтому, если он завершился — ошибка. _logger.LogWarning("AihitMainSyncer завершил работу неожиданно. Перезапуск через 10 сек..."); } catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested) { // Ожидаемое завершение при остановке хоста break; } catch (Exception ex) { _logger.LogError(ex, "Необработанное исключение в Worker. Повторная попытка через 10 сек..."); } try { await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken); } catch (OperationCanceledException) { break; } } } public override Task StopAsync(CancellationToken cancellationToken) { aihitSyncer.StopAsync(); return base.StopAsync(cancellationToken); } } }