ASP.NET MVC - асинхронные контроллеры
Зачем нужны?
Запросы к контроллерам обслуживаются ограниченным числов потоков из пула потоков. Если какой-то долгий запрос выполняется синхронно, то этот выделенный поток будет долго недоступен, а если таких запросов возникнет много одновременно, то потоки рано или поздно кончатся (thread starvation)
Как сделать?
просто меняем action method
вместо void ActionResult ...
делаем async Task
Когда использовать?
Когда есть запросы к диску, или сетевые запросы. Использование на методах, завязанных на CPU, не даст никакой выгоды, а только больше загрузит процессор.
Так же стоит использовать, когда нужно дать пользователям возможность отменить длительную операцию.