2017-01-18 3 views
1

Я пытаюсь понять, если файл .cshtml, обрабатываемый механизмом просмотра Razor, работает async? То есть, если я сделаю длинное вычисление в коде, мне нужно беспокоиться о том, чтобы сделать это async?Являются ли шаблоны Razor асинхронно?

Я предполагаю, что если страница уже асинхронна, нет никакой пользы для меня, когда я делаю еще один асинхронный подсчет, если это все, что я делаю.

Я посмотрел в

\Mvc-dev\src\Microsoft.AspNetCore.Mvc.Razor\RazorPage.cs 

и это не очевидно для меня.

+4

Ну, вы можете использовать 'await' внутри шаблонов бритвы, так что да. В ASP.NET (Core или legacy) вы должны ** НИКОГДА не использовать 'async' /' await' для работы с ограничениями вычислений! Только для I/O (файловая система, сеть, база данных), которые действительно асинхронны. Но если вы хотите сделать «вычислительную» работу внутри вашего представления, ваш дизайн испорчен;) – Tseng

+3

Ваши вычисления должны происходить в другом месте. Контроллер должен захватить результаты вычисления, вставить его в модель представления и передать его контроллеру. В этом весь смысл архитектуры MVC. Не пытайтесь ничего делать, кроме отображения модели в представлении. – mason

+0

@Tseng mason Я ценю советы по архитектуре, но никто из вас не отвечает на мой вопрос. Мой вопрос (снова) заключается в том, что RazorViewEngine запущен Async или нет. Простите, что подразумеваю, что я собираюсь рассчитать пирог на моей странице. –

ответ

1

Да, страницы бритвы выполняются асинхронно. В source for IRazorPage, вы можете увидеть метод, который вызывается системой Razor:

Task ExecuteAsync(); 

Это означает, что вы можете использовать await в представлениях, если вам нужно.

+0

Все комментарии Ценга и каменщика также применяются. Там могут быть некоторые запахи кода, которые требуют внимания. –

Смежные вопросы