2009-12-02 66 views
0

背景:ASP.NET MVC 2的β異步的RenderAction

http://www.hanselman.com/blog/HanselminutesPodcast188ASPNETMVC2BetaWithPhilHaack.aspx

開始從27:15,的RenderAction已經在28:43討論的一個的RenderAction不會Asynchronocity的一部分作爲異步行動方法稱爲。

(比方說,你家門戶網站的索引動作調用1.GetNews 2.GetWeather 3.GetStock asynchronously.You必須有一個對的RenderAction同一視圖中顯示用戶最近的職位。(GetUserRecentPosts))

問題

如果RenderActions本身是異步的是什麼?

會GetUserRecentPosts被稱爲只有回家後,指數完成了動作,即使?

應該RenderActions可以在默認視圖渲染異步?

回答

2

我不認爲你能成功地做到這一點。當你的視圖開始渲染時,你可以從異步處理中獲益的點已經過去了。設置開始/結束方法的MVC管道已經完成,視圖無法在相同的請求中回到它。似乎你可能會被同步處理困住,或者設計一些方法來提前檢索所有數據並將其緩存在TempData中或用於渲染。在斯卡拉

1

電梯框架可能是我所知道的有這將不會阻止主要內容的呈現,但會使用彗星推送爲可能採取的那些塊提供局部視圖內容並行局部操作的用戶一段時間獲取數據。

使用它,只是換塊在視圖並行節點內

<lift:parallel> 
    //this is where Html.RenderAction("GottaFetchNetworkDataFromSomewhereView"); 
    //this is where Html.RenderAction("GottaFetchNetworkDataFromSomewhereView2"); 
    // would go 
</lift:parallel> 

電梯也會照顧你的頁面的連接飢餓的管理以適當的方式http請求,使瀏覽器推送是不「等待」。

不幸的是,ASP.NET MVC有差Comet支持。在異步控制器之外沒有太多的東西,這是一種改進,但並不像Akka用於長輪詢的框架suspend()方法那樣優雅。