Вопрос

Предыстория:

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

Начиная с 27:15, в 28:43 обсуждалось, что RenderAction не будет частью Asynchronocity в качестве вызываемого метода асинхронного действия.

(Допустим, действие индекса вашего домашнего портала вызывает 1.GetNews 2.GetWeather 3.GetStock асинхронно.У вас есть RenderAction, отображающий последние сообщения пользователя в том же представлении.(GetUserRecentPosts))

Вопросы

Что , если сами рендеракции асинхронны ?

Будет ли GetUserRecentPosts вызываться только после того, как home index завершит свое действие, несмотря ни на что?

Должны ли RenderActions отображаться асинхронно в представлении по умолчанию?

Это было полезно?

Решение

Я не думаю, что вы сможете сделать это успешно.Момент, когда вы могли бы извлечь выгоду из асинхронной обработки, уже пройден, когда ваши представления начинают визуализироваться.Конвейер MVC, который настраивает методы begin / end, уже завершен, и представление не имеет возможности вернуться к нему по тому же запросу.Похоже, вы, возможно, застряли с синхронной обработкой ИЛИ придумали какой-то способ получить все ваши данные заранее и кэшировать их в TempData или что-то еще для рендеринга.

Другие советы

Платформа Lift в Scala, вероятно, единственная, о которой я знаю, которая имеет параллельные частичные действия, которые не будут блокировать рендеринг основного содержимого, но будут использовать 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.За пределами асинхронных контроллеров не так много возможностей, что является улучшением, но не таким элегантным, как, скажем, метод framework suspend () Akka для длительного опроса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top