2012-01-10 3 views
9

Я пробовал некоторые поисковые запросы по этой теме, но я хотел бы получить более подробную информацию.Когда ASP.NET убьет новый поток?

Я пытаюсь запустить новый поток внутри приложения ASP.NET, которое позаботится о некоторой работе, которая занимает много времени. Если я поместил это в свой web.config:

<httpRuntime executionTimeout="5" /> 

Обычный запрос истекает после 5 секунд. Помните, это для тестирования. Когда я начинаю новую нить из кода:

var testThread = new Thread(new ThreadStart(CustomClass.DoStuffThatTakesLongTime)); 
    testThread.Start(); 

Этот поток будет работать дольше 5 secounds, это то, что я хочу. НО. Как долго он будет работать? Скажем, этот поток занимает 5 часов (как пример). Когда будет убит поток? Будет ли он работать до тех пор, пока пул приложений не будет переработан? Или есть что-нибудь еще, что убивает эту нить?

+0

Попробуйте, посмотрите, что произойдет. (Пусть новый поток записывает время в текстовый файл или так) EDIT: проверьте, существует ли разница между использованием Thread и Task. – ZippyV

+0

Это хочу, я сделал, но я хотел бы еще немного задуматься. Шлейфы для запуска, но я хотел бы узнать больше о том, что может пойти не так и что искать. –

ответ

9

ASP.NET не знает о потоке, который вы создали - он будет работать до тех пор, пока AppPool не будет переработан или не будет завершен.

Поскольку ASP.Net не знает эту тему, однако может быть прерванным довольно резко в любой момент, если сервер думает, что он должен перерабатывать AppPool, это было бы нехорошо! Phil Haack wrote a blog post о том, как подписаться на событие «AppDomainIsGoingDown».

В отношении того, что может привести к этому, я рекомендую прочитать эту blog post by Tess Ferrandez, но в двух словах они:

  • Это было запланировано сделать так
  • Machine.config, Web .config или Global.asax модифицируются
  • директории бен или его содержимое изменяется
  • число повторных сборников (ASPX, ASCX или asax) превышает предел, заданный в настройке machine.config или web.config (по умолчанию установлено 15)
  • Физический путь виртуального каталога модифицируется
  • политика CAS модифицируется
  • Веб-сервис перезапускается
  • (только 2,0) Применение Подкаталоги удаляются
+0

Итак, это означает, что этот пример «пример» будет работать в течение 5 часов. Будет ли GC заботиться о вещах, когда поток будет завершен или мне нужно каким-либо образом освободить ресурсы? –

+1

@MarkusKnappenJohansson Поток запускается до тех пор, пока он не завершится, или AppPool не будет закрыт. Все ресурсы, полученные в течение жизни Thread, управляются, все необходимые GC все равно будут выполнены. –

+0

So. О том, что поток может быть прерван сервером. Было бы так, что поток действительно работает с чем-то? Или просто, если он простаивает? Есть ли способ «защитить» от этого? –

Смежные вопросы