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 종료");
}
}