Ежедневный таймер не срабатывает на следующий день в заданное время, 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);

Всё хорошо, в нужное время метод запускается. Но если после срабатывания таймера и запуска метода для теста перевести дату и время в ОС на следующий день, и за пару-тройку минут до заданного времени, метод уже не сработает. Может, в коде класса ошибка? Или нужно как-то перезапускать таймер?


Ответы (0 шт):