Вызывается ли страница разгрузки после того, как ответ покинул IIS? - PullRequest
4 голосов
/ 12 октября 2011

Я делаю некоторые диагностические записи в событии Page_Unload в приложении asp.net, эта запись может занять довольно много времени (около 100 мс). Будет ли поток ответа задерживаться кодом в обработчике разгрузки страницы? Я мог бы выполнять свою работу асинхронно, используя theadpool, но я бы предпочел, чтобы это не влияло на время ответа клиента.

Дополнительная информация:

@ thorkia верен в том, что в документации сказано, что Page_Unload вызывается после отправки ответа клиенту, но в моем тестировании (как рекомендовано @steve) оно делает блок. Я пробовал Casini, IIS Express, Full IIS 7.5 (на тестовом сервере) с выпусками и сборками отладки, с отладчиком и без него. И, цепляясь за соломинку, я попытался указать Async = true в Директиве страницы. Я пробовал с Fiddler (потоковая передача включена) и без Fiddler. Я пробовал с IE9 и Firefox. Если документация «правильная», то мне интересно, что она отправляет ответ, но, возможно, не «заканчивает его» (что когда-либо означает, что мне нужно проверить спецификации HTTP), и поэтому страница не отображается в браузер? Но, насколько я понимаю, клиентский браузер начинает отображать страницу, когда получает байты, и это не имеет смысла для меня. Я также пытался просмотреть код в IL Spy, но думаю, что это может занять много времени.

Теперь я заинтригован; я делаю что-то не так или документация вводит в заблуждение?

Ответы [ 2 ]

3 голосов
/ 12 октября 2011

Почему бы не попробовать?

protected void Page_UnLoad(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("In Page_UnLoad");
    System.Threading.Thread.Sleep(10000);
    System.Diagnostics.Debug.WriteLine("Leaving Page_UnLoad");
}
2 голосов
/ 12 октября 2011

Согласно MSDN (http://msdn.microsoft.com/en-us/library/ms178472.aspx) этап выгрузки страницы вызывается только после того, как данные отправлены клиенту.

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

...