Код: Выделить всё
internal class IcbDataProcessor : BackgroundService
{
private readonly ILogger _logger;
private readonly System.Timers.Timer _timer;
private readonly TimeSpan _interval = TimeSpan.FromSeconds(5);
public IcbDataProcessor(ILogger logger)
{
_logger = logger;
_timer = new System.Timers.Timer(_interval);
_timer.Elapsed += Timer_Elapsed;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var now = DateTime.Now;
var nextTime = RoundUp(now, _interval);
if (nextTime > now)
{
await Task.Delay(nextTime - now, stoppingToken);
}
_timer.Start();
}
private static DateTime? _prevRoundedTime;
private void Timer_Elapsed(object? sender, ElapsedEventArgs e)
{
try
{
var roundedTime = RoundDown(DateTime.Now, _interval);
if (roundedTime == _prevRoundedTime)
{
_logger.LogWarning("IcbDataProcessor: Prev Rounded Time is equals to Rounded Time: {Time}", roundedTime);
}
//To do
_prevRoundedTime = roundedTime;
}
catch (Exception ex)
{
_logger.LogError(ex, "DataProcessor EXCEPTION {Message}", ex.Message);
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
_timer?.Dispose();
await Task.CompletedTask;
}
public static DateTime RoundUp(DateTime date, TimeSpan d)
{
return new DateTime((date.Ticks + d.Ticks - 1) / d.Ticks * d.Ticks, date.Kind);
}
public static DateTime RoundDown(DateTime date, TimeSpan d)
{
return new DateTime(date.Ticks / d.Ticks * d.Ticks, date.Kind);
}
}
Кто-нибудь знает, почему это происходит и как это исправить? Любые предложения приветствуются. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/784 ... erval-ends
Мобильная версия