Когда задача уже запущена и нам остаётся только ждать её завершения, некоторые пишут примерно такой код:
while (!task.IsCompleted)
{
Thread.Sleep(100);
}
Выглядит логично, но на практике это сводит на нет весь смысл асинхронности.
Что происходит под капотом
Поток не освобождается. Он занят проверкой статуса в цикле и не делает ничего полезного. Процессор тратит такты на холостые итерации, хотя эти ресурсы могли бы использоваться другим кодом, в том числе самой ожидаемой операцией.
Это особенно критично в серверных приложениях, где количество потоков ограничено. Заблокированный поток в пуле означает, что следующий запрос будет ждать.
Используйте await:
await task;
Это освобождает поток до завершения задачи. Планировщик вернёт управление в нужный момент без лишних проверок и потраченных ресурсов.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
