Re: Background Thread и остановка ASP.NET ApplicationPool
От: dmitry_npi Россия  
Дата: 13.08.12 07:27
Оценка:
Здравствуйте, Glenn, Вы писали:

G>У меня есть ASP.NET приложение работающее на IIS 6. Иногда (нечасто) у него будет необходимость запустить 'длинную' (до 3 мин) задачу — запись пачки данных в БД. Я знаю что такие вещи положено выносить из ASP-приложения вовне — например в сервис. Тем не менее передо мной поставлена задача сделать это в рамках ASP-приложения. Для этого я планирую создать либо поток через "new Thread(...)", либо использовать ThreadPool ASP-приложения.


G>Тем не менее я не знаю точно что случится если в момент когда моя 'длинная' задача будет работать, кто-то захочет остановить ASP.NET ApplicationPool (вручную или произойдёт периодический Recycling). Ну или весь IIS перезапустят.


G>Что будет by default — IIS будет ждать пока моя задача не завершится? Или он будет ждать только некоторое время а потом просто убьет мой поток? Как мне правильно обрабатывать такую ситуацию? Application_End вызовется ДО убийства потока занятого моей задачей? Что делает IIS с накопившимися в ThreadPool-е заданиями — просто теряет их?


IIS будет ждать только те потоки, которые обрабатывают запросы. Про ваши собственные он нничего не знает. Поэтому Нужно сообщить ему об этом посредством этого.

Когда вызовется метод Stop, вам надо задержать исполнение, пока не завершится ваше задание. http://msdn.microsoft.com/en-us/library/system.web.hosting.iregisteredobject.stop
Атмосферная музыка — www.aventuel.net
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.