Когда следует использовать асинхронные контроллеры в ASP.NET MVC? - PullRequest
7 голосов
/ 08 февраля 2011

Замена синхронного контроллера ASP.NET MVC (Controller) на асинхронный контроллер (AsyncController) кажется тривиальной задачей, но когда вам следует это делать?

Должен ли я просто сделать каждый контроллер асинхронным независимо от его действий? Какие примеры операций можно улучшить, если использовать их в асинхронном контроллере?

Возьмем самый тривиальный пример: статические html-страницы. Таким образом, у вас есть самый простой из контроллеров, который просто возвращает View из действия Index. Должен ли этот контроллер быть изменен на асинхронный, то есть теперь возвращается с IndexCompleted?

Ответы [ 2 ]

8 голосов
/ 08 февраля 2011

Я недавно читал эту статью .Он думает, что суммирует, для чего предназначен AsyncController.

6 голосов
/ 29 июня 2013

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

Это все равно, что сказать, что если у нас нет лихорадки, я все равно должен принять таблетку. Вы должны использовать Asynch контроллер, если вы видите, что поток потоков на вашем веб-сервере. Веб-сервер IIS поддерживает пул потоков. Поэтому, когда поступает любой запрос, он забирает поток из пула потоков. Если в данный момент все потоки из пула используются и запрос поступает, этот запрос переходит в режим ожидания. Эта ситуация называется «Нить голодом». Вы также можете посмотреть это видео на YouTube, где я продемонстрировал, как голодание потоков MVC выглядит как

http://www.youtube.com/watch?v=wvg13n5V0V0

Web Server Thread Use Diagram

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...