2015-09-04 5 views
4

Я пытаюсь познакомиться с TPL и использовать его в mvc. Все выглядит нормально во всех руководствах (отметьте действие как async, используйте await => profit!), Но я этого не понимаю.ASP.NET MVC асинхронные действия: кто ждет результата?

Как я понимаю, цепочка вызовов выглядит так: клиент отправляет HTTP-запрос → веб-сервер получает запрос → mvc обработчик действий обнаруживает контроллер и действие с использованием правил маршрутизации и выполняет его → действие записывает результат в ответ.

НО: Что такое магия в роутере, ждут действия? Кто (и как?) Обрабатывает первый асинхронный метод в этой цепочке?

+1

[Когда я должен использовать Async Controllers в ASP.NET MVC] (http://stackoverflow.com/questions/30566848/when-i-should-use-async-controllers-in-asp-net-mvc), [Магия использования асинхронных методов в ASP.NET 4.5 плюс важная информация] (http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx), [Асинхронные операции в ASP.NET MVC используют поток из ThreadPool on .NET 4] (http://stackoverflow.com/questions/8743067/do-asynchronous-operations-in-asp-net-mvc-use-a-thread-from-threadpool-on-net-4), и поэтому на. – CodeCaster

ответ

0

Я попытаюсь объяснить, как я понимаю:

Кто ждет: Ваш сервер, например IIS. Маршрутизатор не делал ничего похожего на магию, просто работал через простой mvc-конвейер с одним длительным исполнением на одном из уровней.

Как ждет: Если вы знаете, что ваше приложение имеет некоторые долго выполняющиеся задачи, вы должны изменить некоторые конфигурации в вашем веб-сервере для высокой параллельности. Вы можете прочитать, как это можно сделать там Server Configuration for High Concurrency/High Latency Web Service Calls. Это дает вам возможность предотвратить статус HTTP 503.

Надеюсь, это даст некоторый глобальный взгляд, если я правильно понял ваш вопрос.

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