def _wait (self, timeout = None):
        timeout and self.reset_timeout (timeout)
        remain = self._timeout - (time.time () - self._init_time)
        if remain > 0:
            with self._cv:
                if self._requests and not self._canceled:
                    self._cv.wait (remain)

        self._canceled = True
        requests = list (self._requests.items ())
        for rs, asyncon in requests:
            rs.set_status (TIMEOUT)
            asyncon.handle_abort () # abort imme
            self._collect (rs, failed = True)