Что лучше использовать для повторяющейся работы: служба или запланированная задача?

StackOverflow https://stackoverflow.com/questions/1430177

Вопрос

У меня есть задача, которую нужно запускать каждые 30 секунд. Я могу сделать одну из двух вещей:

<Ол>
  • Напишите приложение командной строки, которое запускает задачу один раз, ждет 30 секунд, снова запускает ее и затем завершает работу. Я могу запланировать выполнение этой задачи с помощью запланированных задач в Windows

  • Напишите службу, которая запускает задачу несколько раз, ожидая 30 секунд между каждым запуском.

  • Номер 1 более тривиален, на мой взгляд, и я бы предпочел сделать это по умолчанию. Я потерял сознание? Есть ли причина, почему я должен сделать это Сервисом, а не запланированным заданием? Каковы плюсы и минусы обоих и что бы вы выбрали в конце?

    Это было полезно?

    Решение

    Недавно я прочитал хороший пост в блоге по этому вопросу . Существует множество веских причин, по которым вы не должны писать сервис для запуска повторяющегося задания. Кроме того, этот вопрос был задан ранее:

    https://stackoverflow.com/questions / 390307 / окна-сервис против запланированной-задачи Служба Windows или запланированное задание, какое из них мы предпочитаем?

    Одним из преимуществ использования запланированной задачи является то, что если при запуске службы существует некоторый потенциальный риск, такой как утечка памяти или зависание сетевого подключения, то служба windows может потенциально зависать в течение длительного времени, что отрицательно влияет на другие пользователи. С другой стороны, запланированное задание написано для кратковременного выполнения, поэтому, даже если оно утечет, эффект минимизируется.

    С другой стороны, кто-то в одном из вышеупомянутых вопросов заметил, что у планировщика есть предел точности где-то в диапазоне 1 минуты, поэтому вы можете видеть, что планировщик не может запускать вашу задачу каждые 30 секунд с точность.

    Очевидно, что есть несколько компромиссов, но, надеюсь, это поможет вам принять правильное решение.

    Другие советы

    Если вы пытаетесь запускаться каждые 30 секунд, я бы выбрал вариант 2. В этом случае это в значительной степени постоянная работа. Затраты на запуск и остановку процесса, вероятно, выше, чем сам процесс, особенно если вы используете соответствующий таймер.

    Если вы выполняете задание, которое выполняется один раз в день (или несколько раз в день), я бы выбрал вариант 1 - использование запланированного задания.

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

    Кроме того, служба может хранить ресурсы в памяти, такие как чтение входных данных из файла, и должна делать это только при запуске службы, а не каждые 30 секунд.

    30 секунд - довольно короткий интервал (условно говоря) между циклами обработки. Как и у других, у меня есть проблемы с планировщиком задач, и я боюсь, что такой короткий интервал только усугубит проблемы, с которыми вы можете столкнуться, если вы воспользуетесь этим подходом. Если бы это был мой проект, я бы почти наверняка пошел с сервисом.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top