Это что-то вроде родственного вопроса к этому вопросу программистов .
Вкратце, мы рассмотрим, как правильно продвигать некоторую работу, которая была связана с пользовательскими запросами, в фоновом режиме "«.Связанный вопрос дал мне много идей, если мы пойдем по пути обслуживания, но на самом деле не предоставил никаких убедительных аргументов относительно того, почему именно мы должны.
Я признаю, что для меня способностьсделать моральный эквивалент
WorkQueue.Push(delegate(object context) { ... });
действительно убедительно, поэтому, если это просто немного сложно (а не по своей сути неработоспособно), я склонен придерживаться подхода фонового потока.
Итак, проблемы с фоновыми потоками, о которых я знаю (в контексте AppPool):
- Они могут умереть в любое время из-за перезапуска AppPool
- Решение:отслеживать, когда задача выполняется, поэтому она может быть перезапущена * в случае необходимости нового потока
- ThreadPool используется для ответа на входящие HTTP-запросыиспользование IIS
- Решение: создайте наш собственный пул потоков, также ограничив число потоков.
Мой вопрос: что мне не хватает, если что? Что еще может пойти не так? С фоновыми потоками в ASP.NET?
* Задание, о котором идет речь, уже безопасно перезапускать, так что это не проблема.
ǂ Предположим, мы не делаем ничего действительно глупого, например, бросаем исключения в фоновые потоки.