Async - await , как внутри работает асинхронный код?
Есть такое понятие "Асинхронное программирование", которое подразумевает, что пока ожидается результат выполнения задачи, C# не блокирует основной поток, а переходит на другую задачу пока ожидаемая задача не вернёт результат.
Вопрос: как это устроено внутри? Как C# понимает, что задача вернула результат?