Я попытался выяснить, хорошо ли использование ThreadPools на сайте ASP.NET. Там много дискуссий по этому поводу, но трудно найти официальный источник.
Я создаю сайт, на котором пользователь заполняет форму и нажимает кнопку отправки, это вызывает отправку почты. Моя проблема заключается в том, что API-интерфейс моего поставщика почты довольно медленный (от 100 мс до 12 секунд), и это не очень удобно для оперативности приложения.
Это хорошая идея?:
ThreadPool.QueueUserWorkItem(e =>
EmailFactory.BuildBuyerEmailValidationEmail(client).Send()
);
Форма используется около 100-200 раз в день.
Я бы хотел избежать создания очереди, так как это увеличило бы сложность приложения.
Это выглядит совершенно нормально для меня. Пул потоков содержит 250 потоков на процессор, поэтому даже если эта форма будет отправляться 50 раз в минуту, это не будет проблемой, потому что тогда будет работать только около десяти потоков
Другой вариант - настроить веб-службу (например, WCF), которая обрабатывает всю вашу маршрутизацию электронной почты. Затем вы можете настроить метод службы как односторонний вызов, чтобы при нажатии пользователем кнопки он запускает запрос на веб-сервис и мгновенно возвращается на страницу, так как он не дожидается, когда веб-служба будет обрабатываться. IMO Я бы не пытался напрямую работать с потоками в IIS и управлять им потоками так, как он хочет.
Почему бы не использовать Message Queue для этого? В принципе, вы отправите запрос в очередь, и это может быть обработано позднее - сайт остается приятным и отзывчивым, и у вас есть механизм, который призван гарантировать обработку.
Возможны две проблемы: 1) IIS может убить фоновый поток во время перезагрузки домена приложения (ThreadPool thread) 2) Под высоким давлением фактическая работа в ThreadPool может быть запланирована гораздо позже, чем обычно (когда достигается максимальное количество потоков, элемент сохраняется в очереди в памяти до тех пор, пока не будет доступный поток)
Но похоже, что ThreadPool отлично подходит для вашего дела (отправка электронной почты) - вам не нужна совершенная надежность.