Question

Arrière-plan:

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

À partir de 27h15, RenderAction a été discuté à 28h43 selon lequel un RenderAction ne ferait pas partie d'Asynchronocity en tant que méthode d'action asynchrone appelée.

(Disons que l'action d'indexation de votre portail d'accueil appelle 1.GetNews 2.GetWeather 3.GetStock de manière asynchrone. Vous disposez d'une RenderAction affichant les publications récentes de l'utilisateur sur la même vue.(GetUserRecentPosts))

Des questions

Et si les RenderActions elles-mêmes étaient asynchrones ?

GetUserRecentPosts ne serait-il appelé qu'après que l'index d'accueil ait terminé son action ?

Les RenderActions doivent-ils être rendus de manière asynchrone sur une vue par défaut ?

Était-ce utile?

La solution

Je ne pense pas que vous puissiez réussir cela.Le point où vous pourriez bénéficier du traitement asynchrone est déjà dépassé lorsque vos vues commencent à être rendues.Le pipeline MVC qui configure les méthodes de début/fin est déjà terminé et la vue n'a aucun moyen d'y revenir sur la même requête.On dirait que vous pourriez être coincé avec un traitement synchrone OU concevoir un moyen de récupérer toutes vos données à l'avance et de les mettre en cache dans TempData ou quelque chose pour le rendu.

Autres conseils

Le framework Lift dans Scala est probablement le seul à ma connaissance qui comporte des actions partielles parallèles qui ne bloqueront pas le rendu du contenu principal mais utiliseront Comet-push pour fournir du contenu à vue partielle pour ces blocs, ce qui peut prendre un certain temps. données pour.

pour l'utiliser, enveloppez simplement un bloc dans votre vue à l'intérieur d'un nœud parallèle

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

Lift s'occupera également du manque de connexion de votre page pour gérer les requêtes http de la manière appropriée afin que les poussées du navigateur n'attendent pas.

Malheureusement, ASP.NET MVC ne prend pas en charge Comet.Il n'y a pas grand-chose en dehors des contrôleurs asynchrones, ce qui constitue une amélioration mais pas aussi élégant que, disons, la méthode framework suspend() d'Akka pour les interrogations longues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top