2009-12-02 68 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()方法那样优雅。