2016-11-07 2 views
-2

В ASP.NET MVC и Web API, асинхронное действие является методом действия контроллера, помеченный модификатором async, например:Что ожидает возврат метода асинхронного действия?

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 

Это маркирует метод действий как асинхронные, следовательно, мой псевдоним выражения « async action ', и это указывает на то, что метод может содержать «ожидаемый вызов» другим методам async и что он не будет работать с полной остановкой сверху до нижней строки кода. Он также предполагает, что это вызывающий абонент использует что-то вроде:

ActionResult result = await Login(LoginViewModel model, string returnUrl) 

Значение, что этот вызов будет ждать каких-либо мало (или массивные) асинхронных задач, выделившихся на Login закончить до возвращения правильно ActionRsult. Мы говорим, что вызывающий абонент «ждет» по его вызову Login. Мой вопрос заключается в том, какой объект вызывает этот вызов во втором кодовом блоке и «ожидает асинхронного действия»>

Я никогда не интересовался тем, что называется действием, и ожидал, метод раньше; Я всегда считал, что он довольно близок к конвейеру запроса-ответа, и при асинхронном действии, игнорируя фильтры результатов, он в значительной степени переходит прямо в браузер.

Этот объект, который ожидает действия, делает так, что он может вызывать больше из них и предотвращать отставание в конвейере, или все только async, чтобы мы могли ждать других задач внутри них?

+2

Я понятия не имею, что вы здесь задаете. Возможно, пример кода поможет. – mason

+1

Рамочный трубопровод ожидает действия. В конечном итоге цель состоит в том, чтобы освободить ресурсы, которые в противном случае ожидают другие вещи (I/O, DB и т. Д.), Чтобы веб-сервер мог обрабатывать больше запросов, в то время как другие текущие запросы заняты. – David

+0

@mason Не указывайте теги, что вы должны знать немного о том, о чем я говорю. Я ничего не знаю о медицине, но я не жалуюсь, когда не понимаю медиальных вопросов на форуме. – ProfK

ответ

0

при асинхронном действии, игнорируя фильтры результатов, он в значительной степени подходит к браузеру.

Нет; асинхронные действия обрабатываются так же, как синхронные действия, и находятся на одном уровне абстракции. Они не пропускают никаких фильтров.

Разница между синхронными и асинхронными методами заключается в том, что синхронные методы завершены, когда они возвращаются к вызывающему абоненту; асинхронные методы возвращают задачу, которая завершается, когда метод завершается. Для получения дополнительной информации см. Мой пост async intro.

Этот объект, ожидающий действий, делает так, что он может вызывать больше из них и предотвращать отставание в конвейере, или все просто асинхронные, чтобы мы могли ждать других задач внутри них?

Оба. Ключевое слово async необходимо для использования ключевого слова await, поэтому с точки зрения действия async требуется для ожидания других задач.

С точки зрения инфраструктуры, он понимает, что когда действие возвращает задачу, оно не обязательно завершается. Скорее, действие завершится, когда возвращенная задача завершится. Структура привязывает обратный вызов к этой задаче, которая будет отправлять ответ, когда эта задача будет завершена.