В нескольких ответах предлагалось отправить несколько сообщений, затем вызывать sleep до тех пор, пока не должно быть отправлено следующее сообщение.
Важно, как вы спите в этом случае.
Теоретически вы можете указать потоку спать несколько часов, однако, если в течение этого времени приложение (или служба) будет закрыто, у вас возникнут проблемы.Процесс будет прерван, очистка не будет выполнена.Это не идеально.
Не путайте между концепцией опроса для работы и спящего между опросами.
Если вам придется подождать 5 минут (или 5 часов) перед следующим опросом базы данных, это нормально, однако вы никогда не захотите * спать более чем на секунду или две за раз.
Что бы я сделал.,.
Написать службу windows.У службы есть один активный поток, который опрашивает базу данных, проверяет, есть ли какие-либо сообщения из-за отправки и отправляет их.Затем он будет опрашивать с настраиваемой задержкой (1 минута, 5 минут, 1 час, что бы ни устраивало).
Однако он никогда не будет спать дольше секунды, пока он ожидает опроса базы данных.
Если вы можете быть уверены, что сообщения могут быть добавлены только для отправки после последнего сообщения в БД?Если это так, вы можете проверить время следующего сообщения и не опрашивать до этого времени.
Однако, если я обнаружу, что следующее сообщение не нужно отправлять в течение 5 часов, возможно, что в то время как яжду, что было добавлено сообщение, которое должно быть отправлено через 30 минут?
Если это так, то вы никогда не сможете доверять «Время следующего сообщения» и не опрашивать до этого момента, вам придется постоянно опрашивать ваш фиксированный интервал NB стоит еще раз сказать, ваш интервал опроса и ваш интервал сна не одно и то же.