async def get(self, name, timeout=None, autoremove=True):
        """Wait for a value to be set for a key.

        This is the primary way to receive values from AwaitableDict.
        You pass in the name of the key you want to wait for, the maximum
        amount of time you want to wait and then you can await the result
        and it will resolve to value from the call to set or an
        asyncio.TimeoutError.

        You should generally leave autoremove as the default True value. This
        causes the key to be removed from the dictionary after get returns.
        Normally you have a single user calling ``get`` and another calling
        ``set`` so you want to automatically clean up after the getter
        returns, no matter what.

        If the key has not already been declared, it will be declared
        automatically inside this function so it is not necessary to call
        :meth:`declare` manually in most use cases.

        Args:
            name (str): The name of the key to wait on.
            timeout (float): The maximum timeout to wait.
            autoremove (bool): Whether to automatically remove the
                key when get() returns.

        Returns:
            object: Whatever was set in the key by :meth:`set`.

        Raises:
            asyncio.TimeoutError: The key was not set within the timeout.
        """

        self._ensure_declared(name)

        try:
            await asyncio.wait_for(self._data[name], timeout, loop=self._loop.get_loop())
            return self._data[name].result()
        finally:
            if autoremove:
                self._data[name].cancel()
                del self._data[name]
Wait for a value to be set for a key.

        This is the primary way to receive values from AwaitableDict.
        You pass in the name of the key you want to wait for, the maximum
        amount of time you want to wait and then you can await the result
        and it will resolve to value from the call to set or an
        asyncio.TimeoutError.

        You should generally leave autoremove as the default True value. This
        causes the key to be removed from the dictionary after get returns.
        Normally you have a single user calling ``get`` and another calling
        ``set`` so you want to automatically clean up after the getter
        returns, no matter what.

        If the key has not already been declared, it will be declared
        automatically inside this function so it is not necessary to call
        :meth:`declare` manually in most use cases.

        Args:
            name (str): The name of the key to wait on.
            timeout (float): The maximum timeout to wait.
            autoremove (bool): Whether to automatically remove the
                key when get() returns.

        Returns:
            object: Whatever was set in the key by :meth:`set`.

        Raises:
            asyncio.TimeoutError: The key was not set within the timeout.