AsyncController полезен (по сравнению с обычным контроллером) в следующей ситуации:
У вас есть долго выполняемая задача, и эта задача обычно достигается с помощью другого уровня (веб-службы, базы данных, ...) с помощью Порты завершения ввода / вывода . Таким образом, запрос начинается в рабочем потоке, затем вы вызываете метод BeginXXX, который открывает IOCP (если он поддерживает его, если не бесполезен, так как он просто рисует другой рабочий поток), и рабочий поток немедленно возвращается пул потоков. Во время выполнения длинной операции никакие рабочие потоки не используются на сервере. Как только он завершает это, он сигнализирует IOCP, асинхронный контроллер извлекает другой поток из пула, чтобы просто завершить запрос и вернуть результаты в представление. Здесь следует отметить несколько вещей: тот факт, что вы использовали асинхронный контроллер вместо обычного контроллера, не имеет абсолютно никакого значения для клиента: ему все равно придется ждать столько же времени для завершения запроса, не создается ложное впечатление, что асинхронный контроллер ускорит медленную работу. Просто рабочие потоки будут монополизированы за меньшее время и, следовательно, могут ускорить выполнение других запросов.
Подводя итог: для быстро выполняющихся запросов асинхронные контроллеры не принесут вам никакой пользы по сравнению с обычными контроллерами. Для медленных запросов они могут, но это будет зависеть от характера длительной операции и от того, связан ли он с ЦП или с вводом / выводом. Для задач, связанных с процессором, асинхронные контроллеры также не являются более полезными. Но во всех случаях вы должны выполнять обширное нагрузочное тестирование своего приложения.
Вот очень хорошая статья о MSDN , которая объясняет асинхронные запросы в ASP.NET.
А вот сообщение в блоге , которое иллюстрирует, как асинхронный контроллер может использоваться для реализации длинного опроса.