質問

背景:

http://www.hanselman.com/blog/Hansel minutesPodcast188ASPNETMVC2BetaWithPhilHaack.aspx

27:15 から始まり、28:43 で RenderAction は呼び出される非同期アクション メソッドとして Asynchronocity の一部ではないことが議論されています。

(ホーム ポータルのインデックス アクションが 1.GetNews 2.GetWeather 3.GetStock を非同期的に呼び出しているとします。同じビューにユーザーの最近の投稿を表示する RenderAction があります。(GetUserRecentPosts))

質問

RenderAction 自体が非同期の場合はどうなるでしょうか?

GetUserRecentPosts は、ホーム インデックスのアクションが完了した後にのみ呼び出されますか?

RenderActions はデフォルトでビュー上で非同期的にレンダリングされるべきですか?

役に立ちましたか?

解決

これをうまく行うことはできないと思います。ビューのレンダリングが開始された時点では、非同期処理のメリットが得られる時点はすでに過ぎています。begin/end メソッドを設定する MVC パイプラインはすでに完了しており、ビューは同じリクエストで MVC パイプラインに戻る方法がありません。同期処理に行き詰っているか、すべてのデータを事前に取得してレンダリング用に TempData などにキャッシュする何らかの方法を考案しているようです。

他のヒント

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 のフレームワークの長期ポーリング用の stop() メソッドほど洗練されていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top