code: async def block_until(*conditions, timeout=None, wait_period=0.5, loop=None):
      
      async def _block():
          while not all(c() for c in conditions):
              await asyncio.sleep(wait_period, loop=loop)
      await asyncio.wait_for(_block(), timeout, loop=loop)
docs: Return only after all conditions are true.