Вступить в клуб →
средняявопросC# и ASP.NET Core

Вызов .Result внутри контроллера под нагрузкой

В сервисе с нагрузкой около 300 rps встречается такой контроллер:

[HttpGet("{id}")]
public IActionResult Get(int id)
{
    var order = _service.GetOrderAsync(id).Result;
    return Ok(order);
}

GetOrderAsync ходит в базу и во внешний сервис, среднее время — 200 мс. Чем опасен такой код?

  • Ничем: .Result просто дожидается результата, async/await нужен для читаемости кода и на пропускную способность сервиса не влияет
  • Поток из пула блокируется на всё время операции ввода-вывода, и под нагрузкой пул исчерпывается
  • Код не скомпилируется: обращаться к .Result у Task разрешено только внутри async-метода
  • Операция выполнится синхронно и потому быстрее, чем через await, но потеряется поддержка отмены запроса

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела