using Bitget_Server.Application.Services; namespace Bitget_Server.Application.BackgroundServices; /// /// 기존 MainForm.Signalnfo → IndicatorProcess.calProcess 무한 루프 이식. /// SignalProcessService.ProcessOnceAsync 를 짧은 주기로 반복 호출한다. /// public class SignalProcessBackgroundService : BackgroundService { private readonly SignalProcessService _signalProcess; private readonly ILogger _logger; /// 신호 검색 루프 1회 처리 후 대기 시간 (기존 while 루프는 Thread.Sleep 없이 반복되었으나 CPU 과점유 방지를 위해 200ms 부여). private static readonly TimeSpan LoopInterval = TimeSpan.FromMilliseconds(200); public SignalProcessBackgroundService( SignalProcessService signalProcess, ILogger logger) { _signalProcess = signalProcess; _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("SignalProcessBackgroundService 시작 (Interval={Ms}ms)", LoopInterval.TotalMilliseconds); while (!stoppingToken.IsCancellationRequested) { try { await _signalProcess.ProcessOnceAsync(stoppingToken).ConfigureAwait(false); } catch (OperationCanceledException) { /* shutdown */ } catch (Exception ex) { _logger.LogWarning(ex, "SignalProcess 1회 처리 오류"); } try { await Task.Delay(LoopInterval, stoppingToken).ConfigureAwait(false); } catch (OperationCanceledException) { /* shutdown */ } } _logger.LogInformation("SignalProcessBackgroundService 종료"); } }