Рециркуляцию отработанного процесса можно рассматривать как остановку и запуск процесса, удерживающего .Net. Все данные AppDomain потеряны.
Насколько я понимаю, Application_Start выполняется только при поступлении первого запроса. Я ожидаю, что поведение будет таким же, даже после переработки.
Но если он не выполняется (интересно), вы всегда можете запустить его где-нибудь еще. Есть множество способов сделать это. Например, Application_BeginRequest или ctor любого статического класса, на который ссылаются при первой загрузке.
Обратите внимание, что HttpContext.Cache на самом деле является просто статическим объектом, поэтому вы можете просто иметь static bool isInitialized = false;
, который вы измените после завершения init, и он будет храниться в запросах. С удачно расположенным lock() {}
он должен работать без сбоев (поэтому два запроса не запускают две инициализации).
Я обычно решаю это кешировать по требованию. Не подходит для всех решений. Также я использую Enterprise Framework или AppFabric для установки тайм-аута (TTL) для кэша.