我正在寫一些代碼,其中最常見的是沒有結果將從查詢返回對實體框架。這個請求是由一些jQuery代碼提交的,如果我回復「沒有結果」,它只會轉過來再次發出相同的請求 - 所以我想不迴應,直到有一些結果可用,或者合理的時間量(例如30秒)已經過去了(但是,我不想在30秒內緩存結果 - 30秒是一段合理的時間以不發送對查詢的響應 - 如果結果可用,我想要他們可用「立即」)實體框架,等待結果
我該如何最好地去做這件事。我嘗試在重新查詢之間進行睡眠,但它a)似乎沒有工作(每個以無結果開始的請求等待整整30秒),並且b)將綁定一個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);
}
}
我只想用輸出緩存此 – BrokenGlass 2011-04-29 15:57:50
我認爲按照定義,如果你想讓線程等待,直到有結果,那麼你將綁定一個線程。 – Rory 2011-04-29 16:00:56
@BrokenGlass - 如果結果*可用,我希望它們儘快返回給調用者,即不會在緩存過期25秒後返回。 – 2011-04-29 16:02:03