Start the plugins by priority

        Start the plugins based on the priority and wait for them to be fully
        started before starting the next one. This ensure plugins can use
        a previously started one during startup.

async def _start_plugins(self) -> None:
        """
        Start the plugins by priority

        Start the plugins based on the priority and wait for them to be fully
        started before starting the next one. This ensure plugins can use
        a previously started one during startup.
        """
        logger.debug('Starting plugins')
        for priority in sorted(self._start_priority, reverse=True):
            logger.debug(
                'Starting plugins %s',
                ', '.join(self._start_priority[priority])
            )

            for name in self._start_priority[priority]:
                plugin = self._plugins[name]
                self._tasks[name] = self._loop.create_task(
                    plugin['plugin'].start()
                )

            while not all(self._plugins[name]['plugin'].started
                          for name in self._tasks):

                for task in self._tasks.values():
                    if task.done():
                        task.result()
                await asyncio.sleep(0.2, loop=self._loop)

            else:
                logger.debug('Plugins %s started',
                             ', '.join(self._start_priority[priority]))