2014-02-21 39 views
1

我正在開發一個應該實現多線程功能的ASP.NET MVC項目。實際上,在這個應用程序中,用戶可以從一個頁面導航到另一個頁面,因此他可以改變他當前控制器的動作。我的問題是,ASP.NET MVC中有沒有一種方法可以保證動作在後臺運行,即使用戶切換了動作。這意味着,即使他在航行後返回視圖,他也可以得到他在本次會議中發佈的內容(知道它可能需要一些時間才能做到)。我知道這與它的矛盾MVC模式,但是這個應用程序應該是一個服務器端應用程序。多線程和異步動作調用與ASP.NET MVC

我做了一些研究,他們說,一個線程池,臺異步控制器(http://msdn.microsoft.com/en-us/library/ee728598%28v=vs.100%29.aspx#performing_multiple_operations_in_parallel)可能是這個問題的解決方案。我會很高興聽到任何其他建議來幫助我以正確的方式實施這個項目。

回答

1

我認爲你應該重新訪問這個應該實現並行模式的前提。

對於這個工作我想你想要的方式運行,則需要通過會話ID的一鍵共享緩存。您的異步任務將在那裏存儲他們的結果。您需要一些在應用程序初始化時初始化的中間件,該中間件將由一個託管線程池和一個緩衝的任務隊列組成。您的UI線程/ Web服務器線程會爲中間件排隊任務,以便將結果處理並將結果轉儲到共享緩存中,然後您將檢查來自該客戶端的後續Web請求的結果。這是很多工作。尤其是如果您的客戶端和服務器端應用程序已經像ASP.NET中一樣緊密地綁定在一起。

或者,你可以從ASP.NET移開應用程序和執行服務器端應用程序,在C#中,你的客戶端應用程序,Javascript編寫的,將打擊使用AJAX請求REST API。您在一些js MVC框架中將客戶端應用程序構建爲單頁應用程序。這將允許用戶以無縫的體驗訪問客戶端應用程序,因爲除非客戶端應用程序希望它們成爲服務器,否則對服務器的調用是非阻塞的。那麼真的不需要上面提到的異步模式,它實際上不會給你帶來任何性能提升,並且它不會很好地擴展。

+0

感謝您的答覆,我thouht關於AJAX和臺異步調用作爲解決我的問題,這將通過的ASP.NET Web API可以輕鬆實現。但是,當涉及線程時,不應該以任何方式中斷這些的執行,並且考慮到用戶剛剛實現的狀態也應該存儲在一些現金中(即使他跳到其他動作和控制器上時) ,你提出的middelware解決方案是不可避免的。 –