0

背景:

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

从 27:15 开始,RenderAction 已经在 28:43 讨论过,RenderAction 不会作为异步操作方法调用的异步操作方法的一部分。

(假设您的主门户索引操作调用 1.GetNews 2.GetWeather 3.GetStock 异步。您有一个 RenderAction 在同一视图上显示用户最近的帖子。(GetUserRecentPosts))

问题

如果 RenderActions 本身是异步的呢?

GetUserRecentPosts 只有在 home 索引完成其操作后才会被调用吗?

默认情况下,RenderActions 是否应该在视图上异步呈现?

4

2 回答 2

2

我认为你不能成功地做到这一点。当您的视图开始渲染时,您可以从异步处理中受益的点已经过去了。设置开始/结束方法的 MVC 管道已经完成,视图无法在同一个请求中返回。似乎您可能会陷入同步处理或设计某种方法来预先检索所有数据并将其缓存在 TempData 或其他东西中以进行渲染。

于 2009-12-16T03:05:34.293 回答
1

Scala 中的 Lift 框架可能是我所知道的唯一一个具有并行部分操作的框架,它不会阻止主要内容的呈现,但会使用 Comet-push 为可能需要一段时间才能获得的那些块提供部分视图内容数据为。

要使用它,只需在并行节点内的视图中包装一个块

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

Lift 还将处理您页面的连接不足问题,以便以适当的方式管理 http 请求,以便浏览器推送不会“等待”。

不幸的是,ASP.NET MVC 对 Comet 的支持很差。异步控制器之外没有太多东西,这是一种改进,但不如 Akka 的长轮询框架 suspend() 方法那么优雅。

于 2012-02-11T10:28:12.230 回答