Я постараюсь кратко объяснить, чего я хочу достичь. Моя первоначальная идея сделать это, на мой взгляд, не сработает, поэтому я пытаюсь решить, как лучше спланировать это.
Первая мысль была:
У меня есть список сообщений, которые необходимо отправлять в запланированное время, каждое из них хранится в центральной базе данных SQL.
Намерение состоит в том, чтобы использовать службу Windows, у которой будет таймер, который срабатывает каждые 30 минут. Так ..
* * 1010
ScheduleMessages проверит базу данных на наличие неотправленных сообщений, которые должны быть отправлены в течение следующих 30 минут, а затем пометит их в базе данных как:
ScheduleActivated = 1
Для каждого из них, помеченного как ScheduleActivation = 1, он запускает объект времени клиента, который наследуется от обычного таймера, который также включает в себя свойства для сообщения, которое необходимо отправить.
Будет установлен флажок во время отправки сообщения, оно отправит сообщение и пометит в базе данных как успешное.
Основная проблема в этом заключается в том, что у меня повсюду будут таймеры, и если запланировано несколько сотен сообщений одновременно, это, вероятно, будет либо неэффективным, либо полностью упадет.
После переоценки я подумал о решении 2
Моя другая идея состояла в том, чтобы в сервисе работал 1 таймер, который срабатывает один раз каждые 10 минут. Каждый раз, когда он тикает, он запускает метод, который собирает каждое отдельное сообщение, которое должно быть отправлено в любой точке вплоть до этого времени, в список, а затем обрабатывает их по одному.
Это выглядит гораздо менее ресурсоемким, но я беспокоюсь, что если таймер включится через 10 минут, любые сообщения, которые не закончили отправку, будут перехвачены в следующем тике и будут отправлены снова.
Будет ли работать остановка таймера после его включения в течение 10 минут, затем сброс на ноль и запуск снова после отправки сообщений.
Есть ли 3-е решение проблемы, которое лучше, чем выше?