def start(self, wait=False):
        """Start a task.

        This function depends on the underlying implementation of _start, which
        any subclass of ``Task`` should implement.

        Args:
            wait (bool): Whether or not to wait on the task to finish before
                returning from this function. Default `False`.

        Raises:
            RuntimeError: If the task has already been started without a
                subsequent call to ``reset()``.
        """
        if self._status is not TaskStatus.IDLE:
            raise RuntimeError("Cannot start %s in state %s" %
                               (self, self._status))
        self._status = TaskStatus.STARTED
        STARTED_TASKS.add(self)
        self._start()

        if wait:
            self.wait()

        return self.return_values