AsyncProjection(
self,
)_ProjectionBaseAsync iterable of deltas that is also awaitable for the final value.
Uses an asyncio.Event to notify consumers of state changes. Each
waiter — the awaitable (__await__) and each async iterator cursor
— shares the event and re-checks its own condition on wake. The event
is cleared before a waiter awaits, so stale "something happened"
signals don't cause spin loops.
This is single-loop only — producers and consumers must share an
event loop. If cross-thread wake is ever required, revert to a
list-of-futures pattern with call_soon_threadsafe.