code: async def get(self, *, encoding=None, decoder=None):
          
          assert decoder is None or callable(decoder), decoder
          if self._queue.exhausted:
              raise ChannelClosedError()
          msg = await self._queue.get()
          if msg is EndOfStream:
              # TODO: maybe we need an explicit marker for "end of stream"
              #       currently, returning None may overlap with
              #       possible return value from `decoder`
              #       so the user would have to check `ch.is_active`
              #       to determine if its EoS or payload
              return
          if self._is_pattern:
              dest_channel, msg = msg
          if encoding is not None:
              msg = msg.decode(encoding)
          if decoder is not None:
              msg = decoder(msg)
          if self._is_pattern:
              return dest_channel, msg
          return msg
docs: Coroutine that waits for and returns a message.
  
          :raises aioredis.ChannelClosedError: If channel is unsubscribed
              and has no messages.