Какой самый простой способ запланировать запуск функции в определенное время с помощью C # - PullRequest
5 голосов
/ 18 ноября 2011

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

Эти выигрышине всегда с фиксированными интервалами, и более 1 сообщения могут захотеть быть отправлены одновременно.

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

Легче всего сделать, просто чтобы функция запускалась снова и снова, после завершения она просто запускалась снова

Так что это будет:

  • Start Runи проверьте текущую дату / время
  • Проверьте наличие неотправленных сообщений
  • Отправьте все сообщения, которые должны быть отправлены до и до времени, когда он начал работать
  • Начать все сначаласнова и возьмите текущую дату / время

Моя проблема с этим заключается в том, будет ли ужасно неэффективно постоянно запускать метод, возможно, в течение нескольких часов или дней без фактической отправки сообщения.

TheОсновное напряжение в этом случае, я думаю, будет помещено в базу данных, оно будет постоянно получать запрос.

Есть ли лучший способ запланировать что-то подобное, чтобы это произошло.

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

Предлагает ли Workflow 4 что-нибудь подходящее для планирования?

Ответы [ 13 ]

0 голосов
/ 18 ноября 2011

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

0 голосов
/ 18 ноября 2011

Это зависит от того, что вы используете. Использование запланированного задания или службы вполне приемлемо для описываемого вами сценария.

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

0 голосов
/ 18 ноября 2011

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

Вы даже можете иметь задание SQL, которое выбирает записи, которые не отправляются, и совпадает с текущим временем, и вызывает хранимую процедуру, которая вызывает сборку dot net для отправки электронной почты. Сборка dot net может использовать SMTPClient для отправки электронных писем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...