the document about
asyncio.Condition is kind of misleading.
the doc says:
An asyncio condition primitive can be used by a task to wait for some event to happen and then get exclusive access to a shared resource.
but in the example code
cond = asyncio.Condition() # ... later async with cond: await cond.wait()
it’s more like we acquire the lock first, then we wait on the event.