Все мы знаем и любим async/await. Но знаете ли вы, что под капотом происходило всё это время?
Каждый раз когда вы писали async метод — компилятор переписывал его в большой конечный автомат. Вместо вашего чистого кода генерировался
struct, реализующий IAsyncStateMachine, с MoveNext(), switch-блоками и кучей вспомогательных полей.Microsoft перенесла управление async из компилятора прямо в рантайм. Теперь компилятор больше не генерирует конечный автомат — он просто помечает метод атрибутом
[MethodImpl(MethodImplOptions.Async)] и делает шаг назад.Рантайм сам перехватывает await-точки через
AsyncHelpers.Await(...), сохраняет только нужные переменные и возобновляет выполнение когда Task готов.Что это даёт:
• Zero allocation в happy path — никакого лишнего боксинга
• Читаемые стектрейсы с вашими именами методов, а не MoveNext
• Рантайм понимает async-семантику и может оптимизировать цепочки await
• Native AOT поддержка из коробки
Как включить сейчас:
<Features>$(Features); runtime-async=on</Features>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<TargetFramework>net11.0</TargetFramework>
Это самое крупное изменение в async-инфраструктуре .NET за последние годы.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view
