How's that again?

ASP.NET MVC - асинхронные контроллеры

Зачем нужны?

Запросы к контроллерам обслуживаются ограниченным числов потоков из пула потоков. Если какой-то долгий запрос выполняется синхронно, то этот выделенный поток будет долго недоступен, а если таких запросов возникнет много одновременно, то потоки рано или поздно кончатся (thread starvation)

Как сделать?

просто меняем action method

вместо void ActionResult ...

делаем async Task ...

Когда использовать?

Когда есть запросы к диску, или сетевые запросы. Использование на методах, завязанных на CPU, не даст никакой выгоды, а только больше загрузит процессор.

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