0

バックグラウンド:

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

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

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

質問

RenderActions自体が非同期の場合はどうなりますか?

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

RenderActionsは、デフォルトでビューに非同期でレンダリングする必要がありますか?

4

2 に答える 2

2

私はあなたがこれをうまく行うことができないと思います。ビューがレンダリングを開始するときに、非同期処理の恩恵を受けることができるポイントはすでに過ぎています。begin / endメソッドを設定する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.NETMVCのCometサポートは不十分です。Asynchronous Controllersの外にはそれほど多くはありません。これは改善されていますが、たとえば、Akkaのロングポーリング用のフレームワークsuspend()メソッドほど洗練されていません。

于 2012-02-11T10:28:12.230 に答える