У меня есть веб-приложение ASP.NET MVC 3 / .NET, которое в значительной степени управляется данными, в основном вокруг концепции "местоположений" (Нью-Йорк, Калифорния и т. Д.).
В любом случае, у нас есть несколько довольно занятых запросов к базе данных, которые кэшируются после их завершения.
Например:
public ICollection<Location> FindXForX(string x)
{
var result = _cache.Get(x.ToKey()) as Locaiton; // try cache
if (result == null) {
result = _repo.Get(x.ToKey()); // call db
_cache.Add(x.ToKey(), result); // add to cache
}
return result;
}
Но я не хочу, чтобы незадачливый первый пользовательожидание этого вызова базы данных.
Вызов базы данных может занять от 40 до 60 секунд, что значительно превышает время ожидания по умолчанию для запроса ASP.NET.
Я хочу "предварительно прогреть"«эти вызовы для определенных« популярных »мест (например, Нью-Йорк, Калифорния) при запуске моего приложения или вскоре после него.
Я не хочу просто делать это в Global asax (Application_Start), потому что приложение будет слишком долго запускаться.(я планирую предварительно кэшировать около 15 местоположений, так что это несколько минут работы).
Есть ли способ, которым я могу запустить эту логику асинхронно?Может быть, сервис на стороне является лучшим вариантом?
Единственная другая альтернатива, о которой я могу подумать, это страница администратора , в которой есть кнопки для этих действий.Таким образом, администратор (например, я) может запустить эти запросы после запуска приложения.Это было бы самым простым решением.
Любой совет?