code: def wait(self, timeout: Union[float, datetime.timedelta] = None) -> Awaitable[None]:
          
          fut = Future()  # type: Future[None]
          if self._value:
              fut.set_result(None)
              return fut
          self._waiters.add(fut)
          fut.add_done_callback(lambda fut: self._waiters.remove(fut))
          if timeout is None:
              return fut
          else:
              timeout_fut = gen.with_timeout(
                  timeout, fut, quiet_exceptions=(CancelledError,)
              )
              # This is a slightly clumsy workaround for the fact that
              # gen.with_timeout doesn't cancel its futures. Cancelling
              # fut will remove it from the waiters list.
              timeout_fut.add_done_callback(
                  lambda tf: fut.cancel() if not fut.done() else None
              )
              return timeout_fut
docs: Block until the internal flag is true.
  
          Returns an awaitable, which raises `tornado.util.TimeoutError` after a
          timeout.