Страницы

Поиск по вопросам

понедельник, 1 октября 2018 г.

Выполнение операций по расписанию

Необходимо проводить определенные действия по расписанию, абстрактный пример:
в понедельник в 12:00 взять файлы из папки во вторник в 13:39 создать папку с файлами в третью пятницу в 7:03 посчитать количество файлов
Целесообразно ли будет для этого использовать timer с Interval в минуту и в его Tick проверять время и день недели?
private void timer1_Tick(object sender, EventArgs e) { var currentTime = DateTime.Now.TimeOfDay; var currentDow = DateTime.Now.DayOfWeek; var oneMinute = new TimeSpan(0, 1, 0); if ((currentDow == DayOfWeek.Monday)&&(currentTime-timeMonday if ((currentDow == DayOfWeek.Tuesday)&&(currentTime-timeTuesday if ((currentDow == DayOfWeek.Friday)&&(MyDoWInMonth(DateTime.Now).Equals(3))&(currentTime-timeFriday

Ответ

Нет, этого совершенно недостаточно. Windows не дает никаких гарантий, что ваш таймер и правда будет вызываться каждую минуту. С такими сравнениями вы запросто пропустите нужное время или отработаете два раза.
Более правильно будет хранить для каждой задачи следующее время запуска и запускать задачу когда текущее время больше запланированного (но не вышло за пределы некоторого разумного интервала). Про строгие сравнения времени забудьте в принципе!

PS для справки - мой старый ответ на смежную тематику: https://ru.stackoverflow.com/a/593736/178779

Комментариев нет:

Отправить комментарий