Как запустить скрипт через произвольные интервалы - PullRequest
0 голосов
/ 22 мая 2009

Я хочу написать пакетное задание на языке c #, которое запускает задачу с произвольным интервалом (например), например каждый час +/- 20 минут и, если обновление не требуется, тогда нужно подождать x2 в последний раз, прежде чем снова запускать.

Какой лучший способ сделать это?

Ответы [ 4 ]

1 голос
/ 22 мая 2009

Ответы всех остальных довольно хороши, но единственное, что я могу здесь внести, это то, что вы не должны делать. не делает приложение службой Windows. Я видел это много раз как ответ на подобные проблемы. Это не то, для чего нужны службы Windows.

В моей книге службы Windows - это приложения / программы, которые висят в фоновом режиме для облегчения работы других программ или не требуют ввода данных пользователем для работы. Он не должен использоваться как метод запуска вашей программы через определенные промежутки времени.

0 голосов
/ 22 мая 2009

Как насчет записи метки времени с последнего «ненужного» запуска в базу данных / какое-либо постоянное местоположение? Тогда ваша первая строка может сказать:

LastRunWithoutUpdating = GetLastRunWithoutUpdating() // load from file, or db...
if (LastRunWithoutUpdating - CurrentTime < DelayInterval) {
    SkipThisRun(); // sys.exit() or something
}
0 голосов
/ 22 мая 2009

может просто создать таймер, который время от времени появляется и запускает метод.

пример:

Timer ProcessTimer = new Timer(new TimerCallback(ProcessRandomTask), null, 0,Timeout.Infinite);


private void ProcessRandomTask(object data)
{
 //Do work

  lock(ProcessTime)
  {
       //change timer
       ProcessTimer.Change(GetNewTime(), Timeout.Infinite);
  }
}
0 голосов
/ 22 мая 2009

Рассмотрите возможность создания простого приложения и его запуска с помощью планировщика задач Windows. Планировщик дает вам большой контроль над тем, когда и что запускается, и включает временную рандомизацию.

РЕДАКТИРОВАТЬ: пропустил часть «2x». В прошлом я создавал службы Windows для этого:

sleep(1x +/- random(20 minutes))
if nothing to do, sleep(2x +/- random(20 minutes))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...