@Mindgrow

Стоит ли выносить выполнение синхронных методов в пулл потоков в контроллерах ASP NET Core?

В проекте был контроллер, который возвращал ActionResult.
При возвращении данных по некоторым параметрам, я стал получать долги возврат в return контроллера.
Решил переделать контроллер на асинхронный, просто изменив сигнатуру возвращаемого результата на Task
В результате на фронте я стал ловить ошибку с циклическим Json. Похоже что ранее задержка происходила из-за этих циклических связей json. Поправил.

Сейчас в названии этого "асинхронного" метода я получаю предупреждение, что метод не асинхронный, однако его поведение после изменения типа результата определённо изменилось, чего вроде бы и достаточно.

Асинхронных блоков, требующих использования await в методе нет.
Встаёт вопрос - перевести ли выполнение этого метода в пулл потоков (через обёртывание в Task.Run) или оставить так как сейчас есть?

И существует ли какой-то более красивый способ превращения синхронных методов в асинхронные, кроме как обёртывание в Task.Run?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka
Токсичный шарпист

Асинхронных блоков, требующих использования await в методе нет.

В таком случае это будет обычный синхронный метод, хоть и возвращающий таску.


Встаёт вопрос - перевести ли выполнение этого метода в пулл потоков (через обёртывание в Task.Run) или оставить так как сейчас есть?

Зависит от того, что именно ты там делаешь.
Если есть работа с IO, то следует перейти на асинхронщину.

Если долгие вычисления, то тогда да - есть смысл сделать Task.Run, чтобы не нагружать потоки из основного пула
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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