ThreadAbortException возникает при удалении изображений в фоновом потоке. ASP.NET 4

#asp.net #application-restart #application-pool #background-thread

#asp.net #приложение-перезапуск #пул приложений #фоновый поток

Вопрос:

Я использую VS2010 и ASP.NET 4. У меня в приложении запущен единственный продолжительный фоновый поток, который предназначен для «очистки» наименее недавно использованных файлов в папке. Он использует EventWaitHandle для устранения ненужной загрузки процессора, но остается запущенным в течение всего срока службы приложения.

Примерно после 24-40 удалений приложение перезапускается. Это происходит как в IIS Express, так и на сервере WebDev с подключенным отладчиком. В фоновом потоке исключений не возникает, но исключение ThreadAbortException возникает во всех потоках, и приложение перезапускается. Нигде не выполняются вызовы перенаправления.

Эти файлы расположены в папке imagecache в корневом каталоге, а не в любой папке, которая должна вызывать перезапуск приложения. Папки не создаются и не удаляются.

Похоже, что перезапуск происходит через определенный интервал времени после достижения определенного порога удалений.

Есть идеи, почему это происходит и как я могу это остановить? Перезапуск каждые 10 секунд для меня неприемлем 🙂

Ответ №1:

Возможно, это утилизация пула приложений IIS? Посмотрите на настройки рециркуляции, чтобы увидеть, может ли там что-то быть.

Другой вариант зависит от того, как вы запускаете фоновый поток. Если это со страницы aspx, то это может быть истечение времени ожидания потока запроса. Если это из global.asax, то это не вариант.

Комментарии:

1. Это из global.asax, события App_start

Ответ №2:

Ошибка asp.net приложение предназначено для обслуживания клиентских запросов, а не для выполнения фоновых задач (хотя есть много кластеров, которые позволяют это).

Можете ли вы поместить поток в службу?

Комментарии:

1. Что ж, ASP.NET ничего хорошего не дает…. Но я использую фоновые потоки около 5 лет без каких-либо серьезных проблем.