Files
BitGet_API/Bitget_Server/Application/BackgroundServices/SignalProcessBackgroundService.cs
2026-04-20 20:27:42 +09:00

51 lines
1.8 KiB
C#

using Bitget_Server.Application.Services;
namespace Bitget_Server.Application.BackgroundServices;
/// <summary>
/// 기존 MainForm.Signalnfo → IndicatorProcess.calProcess 무한 루프 이식.
/// SignalProcessService.ProcessOnceAsync 를 짧은 주기로 반복 호출한다.
/// </summary>
public class SignalProcessBackgroundService : BackgroundService
{
private readonly SignalProcessService _signalProcess;
private readonly ILogger<SignalProcessBackgroundService> _logger;
/// <summary>신호 검색 루프 1회 처리 후 대기 시간 (기존 while 루프는 Thread.Sleep 없이 반복되었으나 CPU 과점유 방지를 위해 200ms 부여).</summary>
private static readonly TimeSpan LoopInterval = TimeSpan.FromMilliseconds(200);
public SignalProcessBackgroundService(
SignalProcessService signalProcess,
ILogger<SignalProcessBackgroundService> 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 종료");
}
}