ASP.NET Бета-версия асинхронной визуализации MVC 2
-
11-09-2019 - |
Вопрос
Предыстория:
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 для длительного опроса.