асинхронное программирование - это реализация кооперативной многозадачности, в await происходит (возможное) переключение на другую корутину, в остальных местах все работает как обычно, async нужен просто чтобы пометить методы как корутины, async with делает await на вход и выход из контекста async for на next, вроде там больше ничего и нет
Ну на таком-то уровне понятно, но что будет с таймаутами, исключениями, отменами?