Why does a worker thread my ASP.NET spawn experience a ThreadAbortException during a Sleep?

I spawn a worker thread in an ASP.NET application running on Windows Server 2008, IIS 7.5 The first thing this worker thread does is sleep for N seconds, and then it does its real work. During the sleep, a catch a ThreadAbortException.

Can you explain this behavior, and bonus points of you point me to any IIS/ASP.NET settings that can be used to adjust the behavior.

EDIT: More info. The suggestion to catch the ThreadAbortException helped me work around the problem, so thanks. I totally rewrote the wording of this question based on what I learned, but still, the same question, WHY is this worker thread getting aborted during a sleep?

7
задан Corey Trager 25 August 2010 в 02:47
поделиться

1 ответ

Исключение ThreadAbortException возникает в вашем рабочем потоке, потому что кто-то еще вызвал в нем Thread.Abort , так что, вероятно, это не то, что сделал ваш рабочий поток напрямую, а какая-то внешняя причина. Первое, что вы должны проверить, это ваш собственный код для любого управления потоком или прерывания, которое вы можете сделать. В противном случае для IIS это может быть связано с перезапуском рабочего процесса (w3wp.exe), пула приложений или AppDomain.

Перезапуск может быть вызван настройкой тайм-аута простоя для пула приложений, регулярным запланированным перезапуском или триггером использования памяти/ЦП. Их можно настроить с помощью диспетчера конфигурации IIS в обозревателе серверов (в Win 2K8) или просто запустив inetmgr.exe. Согласно блогу Тесс здесь, существует ряд других причин для утилизации AppDomain:

  • Machine.Config, Web.Config или Global.asax изменены
  • Каталог bin или его содержимое модифицировано
  • Количество повторных компиляций (aspx, ascx или asax) превышает лимит указанный настройка в machine.config или web.config (по умолчанию установлено значение 15)
  • Изменен физический путь к виртуальному каталогу
  • Изменена политика CAS
  • Перезапущен веб-сервис
  • (только 2.0) Подкаталоги приложений удалены

Эта запись в блоге также содержит информацию о том, как отследить, почему произошла переработка. Для начала попробуйте поискать в журнале событий (eventvwr.msc) подробную информацию.

Вы также можете попробовать отладить рабочий процесс напрямую. Присоедините отладчик VS к экземпляру w3wp.exe, в котором выполняется ваш код, добавьте точку останова в потоке .Abort (может потребоваться включить «пошаговое выполнение исходного кода .NET Framework» в параметрах отладчика) и посмотреть, откуда исходит Abort с помощью окна стека вызовов. Это не скажет вам, почему это происходит, но, по крайней мере, вы будете знать, кто это делает.

6
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: