Если вы не хотите создавать его несколько раз, не используйте объект кэша ASP.Net. Объект кеша, в частности, не гарантирует, что все, что вы в него поместите, останется там. На самом деле, это одна из первых вещей, которую нужно уничтожить, если серверу нужно освободить ресурсы.
Лучшим вариантом было бы использование объекта HttpApplicationState , который должен использоваться для хранения объектов, которые должны быть глобально доступны для всех сеансов. Он также имеет встроенную безопасность потоков, если вы обращаетесь к нему должным образом.
Код для этого следующий:
HttpContext.Current.Application.Lock();
HttpContext.Current.Application["myObject"] = myObject;
HttpContext.Current.Application.Unlock();
Используя это просто
var myObject = (MyObject)HttpContext.Current.Application["myObject"];