Application_end и Background Processing, выходящие на приложение ASP.NET изящно

StackOverflow https://stackoverflow.com/questions/4617613

Вопрос

У меня есть приложение ASP.NET, которое увольняет некоторых фоновых работников, используя ThreadPool.queueUserWorkeTem (). В большинстве случаев появится нулевые фоновые потоки, однако, возможно, возможно, может возникнуть до 5-6 выполнения за раз. Кроме того, большинство будет завершено в течение нескольких секунд, но возможно, что они могут работать до 10 минут.

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

Я не ожидаю, что имею слишком много проблем, создавая способ сигнализировать процессы, чтобы остановить их работу рано и убирать в течение нескольких секунд, чтобы получить вызов, что приложение отключено. Хотя, если у кого-то есть конкретные советы по этому поводу, я бы наверняка ценю это.

Мои два основных вопроса:

1) Когда было бы подходящее время, чтобы рассказать фоновым работникам, чтобы охватить вещи. Во время Application_end? Утилизировать ()? Или, возможно, третий вариант, о которой я не знаю.

2.

void Application_End(object sender, EventArgs e) 
{
    //if this for whatever reason takes a non-trivial time to execute, what problems could I encounter? 
    SignalBackgroundJobsAndWaitForThemToShutDown();
}

Спасибо!

Это было полезно?

Решение

Подходящее время на Application_end.

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

У меня есть, это хорошо разместить время на ожидании, не ждите никогда или иначе, ваш бассейн может иметь проблемы, или выключить, тогда вам нужно проверить настройки вашего пула на максимальном дождении, чтобы выключить пул, там набор значение больше, чем ваше ожидание, или просто отключено.

Также у меня есть, если у вас есть бассейн сада, (более 1 рабочих пулов), а затем application_end называется один раз для каждого пула.

Я использую ту же технику на моих сайтах, так же, как я сигнализирую свои темы, чтобы остановить то же самое, я просто регистрирую окончательный конец, и проверю, когда они являются окончательными конца, а также принудительно моим процедурам остановиться, а не пускать их беги много времени. Application_end вызывается на переработке пула или когда вы открываете файл App_offline.htm или когда вы идете, чтобы закрыть веб-сервис. Лично я отключаю рециркулы, я им не нужен, и я открываю только app_offline.htm, когда я делаю обновления. В этот момент я жду своих нить бассейна, чтобы остановить их работу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top