34

Я пытаюсь понять, почему и когда я должен использовать действие контроллера async. В конце концов, когда я использую в нем await, он будет ждать завершения операции, чтобы вернуть View.ASP.NET MVC4 Async controller - Почему использовать?

Например

public async Task<ActionResult> TryMe() 
{ 
    await SomeActionAsync(); 
    return View(); 
} 

В этом случае, если я использую async или не используя async, то Действие будет занимать то же время для выполнения.

Если я не пытаюсь запустить не менее 2 медленных операций (которые не зависят друг от друга) параллельно, я не вижу причин использовать действие контроллера async.

Пожалуйста, исправьте меня, если я ошибаюсь. Я думаю, что здесь что-то не хватает.

ответ

50

Точка ключевого слова await должна позволять вам работать с асинхронными операциями без написания уродливых обратных вызовов.

Использование асинхронных операций помогает избежать потерь потоков потоков потоков.

Объяснения

ASP.Net работает весь код в нитях управляемого пула потоков.
Если у вас слишком много медленных запросов, запущенных сразу, пул потоков будет заполнен, а новые запросы должны будут ждать, пока поток станет бесплатным.

Часто, однако, ваши запросы медленны не потому, что они выполняют вычисления (вычисляемые), а потому, что они ждут чего-то еще, например, жесткого диска, сервера базы данных или внешнего webservice (IO- или связанный с сетью).

Нет смысла тратить драгоценную нить потока, чтобы дождаться окончания внешней операции.

Асинхронные операции позволяют запускать операцию, возвращать поток в пул, а затем «просыпаться» в другом потоке пула потоков, когда операция завершена.
Пока операция не работает, нити не потребляются.

+0

Итак, вы говорите, что я должен использовать методы async (для работы, как вы сказали (DB, файловая система, WS и т. Д.)), Только для освобождения пула потоков. Причина, что время выполнения останется неизменным в обоих пути. Лучше ли всегда использовать async, когда я пытаюсь выполнить такие операции? – DorR

+0

@DorR: Да. Обратите внимание, что не все операции обязательно будут иметь асинхронные реализации. Большинство методов, не связанных с CPU, в .Net 4.5 теперь имеют async но сторонние библиотеки менее склонны к этому. – SLaks

+9

Существует отличный разговор от Стива Сандерсона, демонстрирующий функции async в ASP.NET: http://channel9.msdn.com/Events/TechDays/Techdays-2012-the -Netherlands/2287 В этой презентации также четко показано преимущество производительности, которое можно получить от использования методов async. –

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