Я пишу некоторый код, в котором, как правило, результаты не возвращаются из запроса к Entity Framework. Этот запрос был отправлен с помощью некоторого кода jQuery, и если я отвечу «без результатов», он просто развернется и снова сделает тот же запрос - поэтому я бы не хотел отвечать, пока не будут получены какие-либо результаты или прошло достаточное количество времени (например, 30 секунд) (однако я не хочу кэшировать результаты в течение 30 секунд - 30 секунд - это разумное время, чтобы не отправлять ответ на запрос - если результаты станут доступны, я хочу они доступны "сразу")
Как мне лучше поступить об этом. Я пробовал спать между повторными запросами, но это а) не похоже на работу (каждый запрос, который начинается без результатов, ждет полных 30 секунд), и б) свяжет поток asp.net.
Так как мне преобразовать мой код, чтобы не связывать потоки asp.net и отвечать, как только будут получены результаты?
[HttpGet]
public ActionResult LoadEventsSince(Guid lastEvent, int maxEvents)
{
maxEvents = Math.Min(50, maxEvents); //No more than 50
using (var dbctxt = new DbContext())
{
var evt = dbctxt.Events.Find(lastEvent);
var afterEvents = (from et in evt.Session.Events
where et.OccurredAt > evt.OccurredAt
orderby et.OccurredAt
select new { EventId = et.EventId, EventType = et.EventType, Control = et.Control, Value = et.Value }).Take(maxEvents);
var cycles = 30;
while (afterEvents.Count() == 0 && cycles-- > 0)
{
System.Threading.Thread.Sleep(1000);
}
return Json(afterEvents.ToArray(), JsonRequestBehavior.AllowGet);
}
}