A имеет веб-приложение ASP.NET 2.0, которое должно позволять отправлять электронные письма. У меня есть служба Windows, которая отправляет электронную почту немедленно. Мое веб-приложение создает сообщение электронной почты согласно некоторому шаблону и помещает его в MSMQ, и служба получает его оттуда.
Проблема в том, что составление сообщения из шаблона может занять некоторое время, и я не хочу, чтобы пользователь ждал, пока сообщение составлено и передано службе.
Я думаю о каком-то фоновом процессе, который будет прослушивать внутреннюю очередь запросов на уведомления. Если очередь пуста, процесс ничего не делает, но как только появляется сообщение, оно начинает обрабатывать сообщение. Я хочу иметь только один процесс, чтобы не создавать много потоков.
В настоящее время моя идея - написать планировщик задач, который будет содержать очередь запросов на уведомления. Когда новый элемент добавляется в очередь, планировщик проверяет, запущен ли процесс отправки уведомлений. Если да, то просто добавьте запрос в очередь. В противном случае он создает новый поток, который будет читать очередь до тех пор, пока она не станет пустой, и выполнять запросы уведомлений.
Меня беспокоит то, что я должен быть уверен, что мой поток не умрет после того, как ASP.NET завершит ответ клиенту, потому что это родительский поток для моего потока. И вопрос в том, как лучше всего это сделать (или это возможно)?
P.S. Это нормально, что мой поток умирает, если IIS перезапускает процесс ASP.NET из-за неактивности пользователя.