Я сомневаюсь, что Task.Wait() внутри имеет цикл while. Но как тогда его реализовали? Через хитрые локи?
Я сомневаюсь, что Task.Wait() внутри имеет цикл while.
Открываем исходники, читаем и доходим до метода SpinThenBlockingWait(). Как видно даже из названия метода, схема следующая: cначала небольшой спин (фактически тот самый "цикл while") в надежде, что таск завершится. Если не таск не завершился, уход на ожидание: на таск вешается продолжение, которое сигнализирует ManualResetEvent, и Wait() завершится, когда сработает ManualResetEvent.
По такой схеме - спин, а потом уход на ожидание - работают многие объекты синхронизации. Спин дешевый, а синхронизация дорогая. Поэтому можно покрутиться некоторое время в ожидании нужного события, а потом уйти в синхронизацию.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости