code: async def _read_data(self):
          
          last_error = ConnectionClosedError(
              "Connection has been closed by server")
          while not self._reader.at_eof():
              try:
                  obj = await self._reader.readobj()
              except asyncio.CancelledError:
                  # NOTE: reader can get cancelled from `close()` method only.
                  last_error = RuntimeError('this is unexpected')
                  break
              except ProtocolError as exc:
                  # ProtocolError is fatal
                  # so connection must be closed
                  if self._in_transaction is not None:
                      self._transaction_error = exc
                  last_error = exc
                  break
              except Exception as exc:
                  # NOTE: for QUIT command connection error can be received
                  #       before response
                  last_error = exc
                  break
              else:
                  if (obj == b'' or obj is None) and self._reader.at_eof():
                      logger.debug("Connection has been closed by server,"
                                   " response: %r", obj)
                      last_error = ConnectionClosedError("Reader at end of file")
                      break
  
                  if isinstance(obj, MaxClientsError):
                      last_error = obj
                      break
                  if self._in_pubsub:
                      self._process_pubsub(obj)
                  else:
                      self._process_data(obj)
          self._closing = True
          self._loop.call_soon(self._do_close, last_error)
docs: Response reader task.