Комментарии 4
Шел 2026й год...
Че там кстати, кто-нибудь успел пощупать async runtime в preview?
А самое главное, что в .Net 11 это перестаёт быть "синтаксическим сахаром" и становится "родной асинхроностью среды выполнения" (подробности тут https://learn.microsoft.com/ru-ru/dotnet/core/whats-new/dotnet-11/runtime#runtime-async или тут https://www.youtube.com/watch?v=8Gl2RmUV0hg), так что все эти сакральные знания "во что компилируется код async/await" перестают быть такими однозначными.
С одной стороны надо это конечно повторять это периодически, с другой стороны это не новость.
А еще итераторы (IEnumerator в C#) это тоже конечные автоматы.
Но надо сказать, что нет смысла концентрироваться на том, что это конечные автоматы, потому что они довольно вырожденные.
Важно тут то, что метод по сути превращается в объект, который хранит состояние метода, текущий шаг и кусочки функции, чтобы вернуться к ним позже.
Таким образом для пользователя он выглядит как линейный а для программы - с разрывами.
Решение действительно на удивление простое и элегантное.

Async/Await в C# это синтаксический сахар для конечного автомата