async def METHOD_NAME(self, n: int, timeout: TimeoutDict) -> bytes:
    read_timeout = none_as_inf(timeout.get("read"))
    exc_map = {trio.TooSlowError: ReadTimeout, trio.BrokenResourceError: ReadError}
    async with self.read_lock:
        with map_exceptions(exc_map):
            try:
                with trio.fail_after(read_timeout):
                    return await self.stream.receive_some(max_bytes=n)
            except trio.TooSlowError as exc:
                await self.stream.aclose()
                raise exc