Во-первых, вы знаете, что вы можете просто заполнить кеш всякий раз, когда у вас есть новый запрос после того, как истекло 30 минут. Я имею в виду, зачем вставлять в кеш, если у вас нет запросов, которым нужны эти данные.
Во-вторых, у нас была похожая потребность некоторое время назад, и в любом случае ... основная идея была:
1. Сохраните ссылку на кэш приложения, чтобы мы могли получить к нему доступ из асинхронного потока
public static System.Web.Caching.Cache BackgroundCache;
public static System.Web.HttpServerUtility BackgroundServer;
затем назначьте их в Application_Start Global.asax
BackgroundCache = System.Web.HttpContext.Current.Cache;
BackgroundServer = System.Web.HttpContext.Current.Server;
2. Запустите таймер также в Application_Start, который будет запускаться в асинхронном потоке каждые 30 минут.
3. Заполните кэш оттуда, используя BackgroundCache и BackgroundServer