2010-08-25 35 views
0

我有一個控制器,其主要功能是保存數據。需要快速執行保存這些數據的ajax調用。控制器用於保存數據,讓它立即返回視圖()並在後臺運行代碼

我想要做的是在控制器中獲取POST並分離後臺線程,該後臺線程將執行保存數據的實際工作;這將允許我立即返回view()。所以基本上唯一需要的延遲是產生後臺線程 - 這應該是毫秒。

我嘗試用一​​個BackgroundWorker

public ActionResult Save(){ 
using (BackgroundWorker worker = new BackgroundWorker()) 
        { 
         worker.DoWork += new DoWorkEventHandler(blah); 
         worker.RunWorkerAsync(Request.Form["data"]); 
        } 
return View(); 
} 

然而,這一呼籲仍然需要一段時間這樣做,讓我覺得後臺工作需要返回查看之前得到執行。

有關如何做到這一點的任何想法,以便即時返回視圖(而後臺工作人員在後臺處理數據需要很長時間)?

+0

也許,ASP.NET請求在使用後臺線程時被阻塞(異步頁面/處理程序在類似的主體上工作)。你應該嘗試Darin Dimitrov使用普通線程的建議。 – VinayC 2010-08-25 07:10:58

回答

1

我會建議將數據轉儲到數據庫或一些其它外部存儲和使用一個單獨的進程做工作(可能是一個Windows服務或Quartz.NET等作業調度工具)。因爲ASP.NET可能會重新循環工作進程(由於內存負載或其他觸發器),所以您可能會失去正在後臺線程中完成的工作(以及線程運行不足(如果有的話)對此動作的要求很高)。

0

嘗試手動紡線,看它是否有什麼差別:

public ActionResult Save() 
{ 
    new Thread(blah).Start(Request.Form["data"]); 
    return View(); 
}