момент он открывает поток? И как это происходит?
Ни в какой
Зависит от реализации класса SynchronizationContext. Если этого класса нет, то async/await работает через пул потоков. В ASP.NET Core этого класса как раз нет (http://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.html)
Вообще советовал бы вот это видео https://youtu.be/lh8cT6qI-nA
Асинк/авэйт это синтаксический сахар над tpl. Да там возможна многопоточность в случае если ты создаёшь и запускаешь задачи в главном потоке, и в нём же дожидаешься их завершения. (Читай про таск) Однако асинк/авейт далеко не об этом. Если упростить и не грузить о машине состояния которую генерит сам сишарп, то можно это представить как цепочку промисов (https://en.m.wikipedia.org/wiki/Futures_and_promises) которые идут выполняются друг за другом авейт за авейтом. При этом какой поток будет их выполнять мы не знаем. Но можем контролировать и этот процесс при помощи планировщика.
Обсуждают сегодня