def _add_task(self, tile_address, coroutine):
        """Add a task from within the event loop.

        All tasks are associated with a tile so that they can be cleanly
        stopped when that tile is reset.
        """

        self.verify_calling_thread(True, "_add_task is not thread safe")

        if tile_address not in self._tasks:
            self._tasks[tile_address] = []

        task = self._loop.create_task(coroutine)
        self._tasks[tile_address].append(task)
Add a task from within the event loop.

        All tasks are associated with a tile so that they can be cleanly
        stopped when that tile is reset.