Async generators and iterators

Асинхронный генератор - это функция, которая возвращает итератор асинхронного генератора. От обучной сопрограммы (выраженной через async await) ее отличает то, что в теле функции находится выражение yield, что позволяет использовать этот объект в конструкциях async for и async with.

Асинхронный контекстный менеджер реализует методы __aenter__() и __aexit__() и доступен через async with

Итератор асинхронного генератора (asynchronous generator iterator) - это объект, который созадается асинхронным генератором. Вызов его содержимого осуществляется с помощью __anext__() - возвращаемый объект будет awaitable, который будет выполнять тело функции асинхронного генератора до следующего выражения yield. Каждый yield временно приостанавливает обработку, запоминая состояние выполнения местоположения (включая локальные переменные и ожидающие попытки операторов). Когда итератор асинхронного генератора возобновляет работу, он возобновляет работу с того места, где остановился.

Асинхронный итерируемый объект (asynchronous iterable) - объект, котоырй может использоваться в async for. Должен возвращать асинхронный итератор черпез __aiter__() метод.

Асинхронный итератор - это объект, для которого имплементированы __aiter__() и __anext__() методы. __anext__() должен возвращать awaitable объект