- Published on
C#의 async/await는 2012년부터 줄곧 컴파일러 기능이었습니다. Roslyn이 메서드 본문을 상태 머신 클래스로 재작성하고, 런타임은 그게 async인지도 모른 채 실행했죠. .NET 11의 runtime-async는 그 재작성을 런타임 안으로 옮깁니다 — 메서드에 MethodImplOptions.Async 플래그가 붙고, 중단과 재개는 JIT과 VM이 직접 처리합니다. 눈에 보이는 첫 성과는 살아 있는 스택 트레이스가 13프레임에서 5프레임으로 줄어든 것이고, 프리뷰 4부터는 런타임 라이브러리 자체가 이 방식으로 컴파일돼 출하됩니다. 즉 당신이 켜지 않아도 BCL의 async 경로는 이미 이걸로 돕니다. 다만 여전히 프리뷰이고, 스펙이 못 박은 영구 제약(반환 타입 4종, byref 지역변수 비호이스팅)이 있으며, 풀링 빌더 회귀·ExecutionContext.SuppressFlow 미준수·IIS in-process 500 같은 이슈가 열려 있습니다. 이 글은 프리뷰 1부터 6까지의 실제 커밋 흔적을 따라가며 무엇이 되고 무엇이 아직 안 되는지 정리합니다.