Wait for the first successful result to become available
        :param timeout: Wait timeout, sec
        :type timeout: float|int|None
        :return: result, or None if all threads have failed
        :rtype: *

def first(self, timeout=None):
        """ Wait for the first successful result to become available
        :param timeout: Wait timeout, sec
        :type timeout: float|int|None
        :return: result, or None if all threads have failed
        :rtype: *
        """
        while True:
            with self._jobfinished:
                if self._results or not self._jobs.unfinished_tasks:
                    break
                self._jobfinished.wait(timeout)
        return self._results[0] if self._results else None