Про закулисье async/await
написано предостаточно. Как правило, авторы декомпилируют IL-код, смотрят на IAsyncStateMachine
и объясняют, вот дескать какое преобразование случилось с нашим исходным кодом. Из бесконечно-длинной прошлогодней статьи Стивена Тауба можно узнать мельчайшие детали реализации. Короче, всё давно рассказано. Зачем ещё одна статья?
Я приглашаю читателя пройти со мной обратным путём. Вместо изучения декомпилированного кода мы поставим себя на место дизайнеров языка C# и шаг за шагом превратим async/await
в код, который почти идентичен тому, что синтезирует Roslyn.