async def METHOD_NAME(self, timeout=None):
    if timeout is None:
        context = NullContext(None)
    else:
        context = trio.move_on_after(timeout)
    with context:
        await self._handshake_complete.wait()
        if self._done:
            raise UnexpectedEOF
        stream_id = self._connection.get_next_available_stream_id(False)
        stream = TrioQuicStream(self, stream_id)
        self._streams[stream_id] = stream
        return stream
    raise dns.exception.Timeout