2011-03-01 75 views
5

當用戶做某事(產生多個報告)時,我們有一些長時間運行的操作觸發。我們不希望用戶等到生成這些報告。有沒有一種快速的方法來實現這一點,而不必實施jobcheduler?也許使用這樣的線程?或者這不安全?不要等待長時間運行ASP.NET MVC

public ActionResult About() 
    { 
     Thread thread = new Thread(new ThreadStart(MuchWork)); 
     thread.Start(); 
     return View(); 
    } 

    public void MuchWork() 
    { 
     Thread.Sleep(10000); 

     Thread.Sleep(4000); 
    } 

回答

0

這是不安全的。在操作過程中服務器崩潰怎麼辦?不知道操作的用戶從未執行過。

通常情況下,工作流程/持久性機制會對此有所幫助,但您必須真正考慮您的業務/用戶體驗情況,以瞭解災難性情況。

+0

不安全我的意思是當異步線程在調用請求結束一段時間後由IIS處理時是否可能。確實有必要進行良好的異常處理/記錄。在我們的情況下,如果服務器會因用戶看到他的報告不存在而崩潰,那麼這將不會是災難性的。 – MichaelD 2011-03-01 08:52:11

0

也許使用線程池或TPL,所以你可以檢查狀態,而不是線程濫用? 通過'檢查'我的意思是看看有多少這些請求,你已經運行之前旋轉另一個。

im geussing該操作的結果是寫在一些數據庫表中,所以用戶可以查詢和查看狀態?

+0

是的,結果是存儲在數據庫中的報告,用戶可以在可用時查看這些報告。 – MichaelD 2011-03-01 08:26:44

+0

您可以使用異步呼叫來實現此目的。根據你的例子,我不認爲線程是必要的。雖然我可能錯過了大局。但是我強烈地感覺到這可以通過異步調用來實現。 – sajoshi 2011-03-01 08:39:41

+0

異步調用仍然阻止當前請求。如果我理解正確,異步調用可擴展性,而不是爲當前線程更快的響應時間。 (在異步調用完成時返回視圖) – MichaelD 2011-03-01 08:48:29