У меня есть приложение ASP.Net, которое запускает некоторых фоновых рабочих с помощью ThreadPool.QueueUserWorkItem ().Большую часть времени будет работать ноль фоновых потоков, однако возможно, что иногда может быть выполнено до 5-6 одновременно.Кроме того, большинство завершится в течение пары секунд, но возможно, что они могут работать в течение 10 минут.
Учитывая все различные сценарии, которые могут привести к закрытию приложения ASP.Net, я бы хотел, чтобы эти фоновые процессы завершались корректно, если это возможно, когда приложение должно завершить работу и они находятся в середине обработки.,
Я не ожидаю, что возникнет слишком много проблем, создающих способ сигнализировать процессам о ранней остановке их работы и очистке в течение нескольких секунд после получения вызова о том, что приложение закрывается.Хотя, если у кого-то есть конкретный совет по этому поводу, я, безусловно, буду признателен за это.
Мои два основных вопроса:
1) Когда будет подходящее время, чтобы сказать фоновым работникам обернуть вещи,Во время Application_End?Dispose ()?Или, возможно, третий вариант, о котором я не знаю.
2) Если во время вышеупомянутого события я дождусь завершения процессов перед возвратом, есть ли момент, когда немедленный возврат из Application_End может вызвать более серьезные проблемы?для приложения, чем не завершение фоновых заданий приятно.
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();
}
Спасибо!