async def METHOD_NAME(self, n: int, timeout: TimeoutDict) -> bytes:
    read_timeout = convert_timeout(timeout.get("read"))
    exc_map = {
        curio.TaskTimeout: ReadTimeout,
        curio.CurioError: ReadError,
        OSError: ReadError,
    }
    with map_exceptions(exc_map):
        async with self.read_lock:
            return await curio.timeout_after(read_timeout, self.stream.METHOD_NAME(n))