TGViewer
C# (C Sharp) programming C# (C Sharp) programming @csharp_ci · 18.1K subscribers
Post #1613 4.02K
✔️ Задача C# и ASP.NET Core

В проде под нагрузкой API начинает подвисать, медиана ответа растёт с 40 мс до 400 мс, а иногда и выше.
Логи показывают, что в горячем месте встречается такой



public async Task<User> GetUserAsync(int id)
{
using var conn = new SqlConnection(_conn);
conn.Open(); // 👈 синхронный блокирующий вызов

var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM Users WHERE Id = @id";
cmd.Parameters.AddWithValue("@id", id);

using var reader = cmd.ExecuteReader(); // 👈 тоже блокировка

if (await reader.ReadAsync())
return Map(reader);

return null;
}


Под нагрузкой резко растёт:

- очередь ThreadPool
- количество заблокированных потоков
- p99 latency

Какой вариант исправления правильный?

1. Заменить ExecuteReader на ExecuteReaderAsync, но оставить conn.Open() как есть.
2. Вынести всё выполнение в Task.Run и пусть код работает на отдельных потоках.
3. Переписать весь путь на асинхронный: использовать OpenAsync, ExecuteReaderAsync и полностью убрать sync-over-async.

Как думаешь, какой вариант правильный?
More from @csharp_ci
  1. Oct 3, 2026Самый неожиданный кандидат на звание самого быстрого JSON-сериализатора для .NET сейчас де…
  2. Oct 3, 2026Post #1892
  3. Oct 2, 2026Post #1891
  4. Sep 29, 2026🖥 C# снова показывает, что «удобный язык = медленный язык» давно не работает. Автор ttfx…
  5. Sep 29, 2026🌦️ Красивый пример того, как может выглядеть современное приложение на Aspire Команда пок…
  6. Sep 27, 2026⚡ .NET 11 ускорили почти везде - от JIT и GC до LINQ и networking Stephen Toub выпустил ог…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →