Ежедневный таймер не срабатывает на следующий день в заданное время, C#
Есть приложение, которое запущено постоянно. Есть задача - запускать метод удаления архивных аккаунтов (которые помещены в архив больше года назад) из БД по таймеру каждый день в определенное время, к примеру в 18:05.
Есть класс таймера
public sealed class DailyTimer : IDisposable
{
private readonly System.Threading.Timer timer;
public DailyTimer(int hours, int minutes, TimerCallback callback)
{
timer = new System.Threading.Timer(callback);
Change(hours, minutes);
}
private static void Change(DailyTimer dailyTimer, int hours, int minutes)
{
var currentTime = DateTime.Now;
var nextAlarm = currentTime.Date.AddHours(hours).AddMinutes(minutes);
if (nextAlarm < currentTime)
{
nextAlarm = nextAlarm.AddDays(1);
}
dailyTimer.timer.Change(nextAlarm.Subtract(currentTime), TimeSpan.FromDays(1));
}
public void Change(int hours, int minutes)
{
Change(this, hours, minutes);
}
public void Dispose()
{
timer.Dispose();
}
}
И есть метод, который нужно запускать:
static void Method(object? obj)
{
DeleteOldAccounts();
}
Создаем объект класса:
TimerCallback tc = new TimerCallback(Method);
DailyTimer timer = new DailyTimer(18, 05, tc);
Всё хорошо, в нужное время метод запускается. Но если после срабатывания таймера и запуска метода для теста перевести дату и время в ОС на следующий день, и за пару-тройку минут до заданного времени, метод уже не сработает. Может, в коде класса ошибка? Или нужно как-то перезапускать таймер?