我正在使用C#5.0,VS 2012,MVC4。我有一個場景,在執行員工信息搜索時需要緩存員工數據和查詢緩存。如何訪問最初加載頁面時啓動的線程,稍後在c#mvc中調用ajax方法?
我並不是最初顯示所有員工,而是想發起一個線程來緩存所有員工。因此,在指數法顯示視圖時,我這樣做
//Starting a thread to load the cache if its null
if (HttpRuntime.Cache["AllEmployees"] == null)
{
thCacheAllEmployees = new Thread(new ThreadStart(CacheAllEmployees));
thCacheAllEmployees.Name = "CacheAllEmployees";
thCacheAllEmployees.Start();
}
CacheAllEmployees是一個單獨的方法將在緩存查詢LDAP和存儲所有員工。 LDAP查詢需要大約15秒的時間。但在視圖加載並且緩存尚未加載後的前15秒內,當用戶開始在搜索框中輸入內容時,我正在調用GetFilteredEmployees操作方法的ajax方法。我想訪問先前啓動的線程,檢查它是否存在,然後等待該線程完成,以便我不需要再次執行新的LDAP查詢。
if (thCacheAllEmployees.IsAlive)
{
thCacheAllEmployees.Join();
if (HttpRuntime.Cache["AllEmployees"] != null)
return (List<CMSUser>)HttpRuntime.Cache["AllEmployees"];
}
但問題是,當它的Ajax調用看起來這將是一個新的主線程和不知道thCacheAllEmployees。所以thCacheAllEmployees將是空對象。所以我需要從當前應用程序中的所有活動線程中獲取此線程的實例。
當視圖首次加載到會話變量中時,我可以存儲thCacheAllEmployees的線程ID,但是如何在進行ajax方法調用時從線程池訪問該線程?
有沒有更好的方法來做到這一點?請給我們建議。
我怎樣才能使AJAX方法調用(主線程)等待thCacheAllEmployees線程完成,然後查詢從填寫緩存?是的,它是一個全局緩存。 – Krish
我在第一次加載頁面時啓動一個線程。然後當進行ajax調用時,我需要檢查緩存是否被填充,否則我需要等待該線程完成。我怎樣才能做到這一點 ? – Krish
感謝烏拉圭回合時間,並幫助:) – Krish