Я бы сделал это, используя System.Timers.Timer
.Далее читаем здесь -> Класс времени
Пожалуйста, знайте, что в моем ответе используется внедрение зависимостей, но его можно легко изменить на создание экземпляров обычных классов.
Я бы реализовал службу таймера, котораянастраивается с использованием интервала в вашем случае 1 минута.Я собираюсь поделиться своей реализацией таймера ниже, она зарегистрирована в контейнере внедрения зависимостей как синглтон, но должна дать вам кое-что для работы.
public class TimerService : ITimerService
{
private readonly System.Timers.Timer _timer;
private DateTime _startTime = DateTime.Now;
private double _timerSettings;
public TimerService()
{
_timer = new System.Timers.Timer
{
AutoReset = true,
Interval = 60000,
};
_timer.Elapsed += (sender, args) =>
{
//Backup Data method here
_startTime = DateTime.Now;
};
}
public double GetTimerInterval()
{
return _timer.Interval;
}
public void StopTimer()
{
if (_timer == null)
{
throw new ApplicationException("Timer not primed.");
}
_timer.Stop();
}
public void StartTimer()
{
if (_timer == null)
{
throw new ApplicationException("Timer not primed.");
}
_startTime = DateTime.Now;
_timer.Start();
}
}
При запуске приложения вы должны отключить таймер, через каждую минуту оно начнет выполнять резервное копирование данных.Из-за AutoReset = true
.
Теперь просто сбросьте таймер в вашем контроллере
[Route("api/[controller]/[action]")]
public class XmlController : Controller
{
private readonly ITimerService _timerService;
public XmlController(ITimerService timerService)
{
//Injected in
_timerService = timerService;
}
[HttpGet]
public IActionResult ProccessXML(object someXMLObject)
{
_timerService.StopTimer();
SomeMethodWithXml(someXMLObject)
//Reset Timer
_timerService.StartTimer();
return Ok();
}
}