Read a single frame of data from the specified stream, waiting until
        frames are available if none are present in the local buffer. If the
        stream is closed and all buffered frames have been consumed, raises a
        StreamConsumedError.

async def read_frame(self, stream_id: int) -> bytes:
        """Read a single frame of data from the specified stream, waiting until
        frames are available if none are present in the local buffer. If the
        stream is closed and all buffered frames have been consumed, raises a
        StreamConsumedError.
        """
        stream = self._get_stream(stream_id)
        frame = await stream.read_frame()
        if frame.flow_controlled_length > 0:
            self._acknowledge_data(frame.flow_controlled_length, stream_id)
        return frame.data