using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using SatelliteProvider.Common.Interfaces; namespace SatelliteProvider.Services; public class RegionProcessingService : BackgroundService { private readonly IRegionRequestQueue _queue; private readonly IRegionService _regionService; private readonly ILogger _logger; public RegionProcessingService( IRegionRequestQueue queue, IRegionService regionService, ILogger logger) { _queue = queue; _regionService = regionService; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("Region Processing Service started"); while (!stoppingToken.IsCancellationRequested) { try { var request = await _queue.DequeueAsync(stoppingToken); if (request != null) { _logger.LogInformation("Dequeued region request {RegionId}", request.Id); await _regionService.ProcessRegionAsync(request.Id, stoppingToken); } } catch (OperationCanceledException) { break; } catch (Exception ex) { _logger.LogError(ex, "Error processing region request"); } } _logger.LogInformation("Region Processing Service stopped"); } }