2013-10-12 36 views
9

我使用的是asp.net mvc,並且當他到達網站的主頁時,我想從數據庫緩存一些關於用戶的數據。 因此,當用戶請求主頁時,我想調用一個異步方法,這會使數據庫調用和緩存數據。無需等待即可開始任務

這樣做的任何例子都會很棒。

+1

你有沒有嘗試過任何東西? – SpringLearner

回答

0
ThreadPool.QueueUserWorkItem((Action<object>)state => 
{ 
    //do your async work 
}, null); 

Task.StartNew(...)

(遺憾的簡短回答,這可能需要你在正確的軌道上或有人可以編輯這個展示一個完整的例子嗎?)

+0

你能幫我緩存一邊嗎?可以說我需要2秒鐘的時間來使用我的Task.StartNew(...)緩存數據。如果用戶恰好在2秒之前訪問這些數據,我將如何讓線程等待,直到從數據庫讀取完整數據並緩存爲止。 – user2873833

+0

在這種情況下,您可以將任務保存在靜態列表/字典中,並檢查任務是否已經可用。在這種情況下,調用task.Wait,然後檢索Task.Result或訪問緩存對象。 (順便說一下,不要錯過HttpUtility.Cache) – eFloh

15
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
    ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

    Task.Run(()=> DoSomeAsyncStuff()); 

    return View(); 
    } 

    private async void DoSomeAsyncStuff() 
    { 

    } 
} 
+0

當DoSomeAsyncStuff()本身掛起時,這對我有用。我試圖按照[在這裏]描述的那樣工作(http://farazdagi.com/blog/2014/rest-long-running-jobs/)。 – OutstandingBill

1

我會說你通過這種方式調用緩存方法:

HostingEnvironment.QueueBackgroundWorkItem(x=> CacheData()); 

這樣,你就不會確保主頁請求等待,以便用戶立即看到主頁,而緩存則發生在服務器的後臺。

PS:但是,您運行應用程序域回收的風險很小,無法使用緩存線程。