@Matisumi

Asp.net core webapi — sync/async методы контроллера?

Не совсем понимаю, есть ли разница между асинхронными методами контроллеров и синхронными в asp.net core webapi (3.1)?
Как я понимаю, каждый вызов контроллера обрабатывается в отдельном потоке, который берется из пула потоков. Если в контроллере есть вызов асинхронных методов - разумеется метод контроллера тоже должен быть асинхронным. А если в коде контроллера нет вызова асинхронных методов, будет ли какая-то разница? Или может быть имеет смысл этот код без асинхронных вызовов обернуть в таск и авейтить его, сделав метод контроллера асинхронным?
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
vabka
@vabka Куратор тега ASP.NET
Токсичный шарпист
А если в коде контроллера нет вызова асинхронных методов, будет ли какая-то разница?

Если асинхронных вызовов нет, то нет смысла делать метод контроллера асинхронным.
Или может быть имеет смысл этот код без асинхронных вызовов обернуть в таск и авейтить его, сделав метод контроллера асинхронным?

Нет. Перед и после контроллера есть ещё куча middleware и Action / Result фильтров, которые и так асинхронные, так что вы и так получите все преимущества асинхронного IO при работе с HTTP

Читайте ASP.NET Core Performance Best Practices
Самое главное:

Do not:
  • Block asynchronous execution by calling Task.Wait or Task.Result.
  • Acquire locks in common code paths. ASP.NET Core apps are most performant when architected to run code in parallel.
  • Call Task.Run and immediately await it. ASP.NET Core already runs app code on normal Thread Pool threads, so calling Task.Run only results in extra unnecessary Thread Pool scheduling. Even if the scheduled code would block a thread, Task.Run does not prevent that.

Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы