четверг, 4 июня 2026 г.

Backgroundservice, ExecuteAsync, StartAsync, StopAsync, Giga

Backgroundservice, ExecuteAsync, StartAsync, StopAsync, Giga

https://gsmainprojects.blogspot.com/2026/06/2606-quotegeneratorworker-quote.html

D:\Projects\VS\2606\Quotes\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorkerSln.slnx

D:\Projects\VS\2606\Quotes\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker\QuoteGeneratorWorker.csproj

--------------------------------------------------------------------------------------------------

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    try
    {
        _logger.LogInformation("📈 Генератор котировок запущен.");

        while (!stoppingToken.IsCancellationRequested)
        {
            var quotesBatch = GenerateQuotesBatch();

            _logger.LogDebug($"--- Новая порция котировок ({quotesBatch.Count} шт.) ---");

            // Параллельная обработка текущей партии котировок
            await Parallel.ForEachAsync(
                quotesBatch,
                new ParallelOptions
                {
                    MaxDegreeOfParallelism = Environment.ProcessorCount,
                    CancellationToken = stoppingToken
                },
                async (quote, token) =>
                {
                    await _handler.HandleAsync(quote, token);
                });

            // Ждем перед генерацией следующей порции
            await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);
        }

        _logger.LogInformation("🛑 Генератор котировок остановлен.");
    }
    catch (OperationCanceledException)
    {
        // Эта секция выполнится, когда сервис остановят
        _logger.LogInformation("Фоновая задача была корректно прервана.");
    }
    finally
    {
        // Здесь можно освободить ресурсы, если они есть
        _logger.LogInformation("Сервис QuoteGeneratorService полностью остановлен.");
    }
}
---------------------------------------------------------------------------- // --- НОВАЯ РЕАЛИЗАЦИЯ СТАРТА --- public override async Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("📈 Генератор котировок готовится к запуску..."); // Здесь может быть логика инициализации, например: // await InitializeDatabaseConnectionAsync(cancellationToken); _logger.LogInformation("🚀 Инициализация завершена. Запуск основного цикла."); // Вызываем стандартный старт, который начнет ExecuteAsync await base.StartAsync(cancellationToken); }
--------------------------------------------------------------------------------- public override async Task StopAsync(CancellationToken cancellationToken) { _logger.LogWarning("⚠️ Получен сигнал об остановке сервиса."); // Здесь может быть логика очистки, например: // await SaveFinalStateToDatabaseAsync(cancellationToken); // CloseFileHandles(); // _logger.LogInformation("🛑 Сервис успешно остановлен."); // Вызываем стандартную остановку await base.StopAsync(cancellationToken); }


Комментариев нет:

Отправить комментарий