private boolean workOne(String taskId, boolean undo) {
    boolean result = true;
    List<TaskWorker> workers = TaskWorker.configRunners(config, taskId, undo);
    List<Future<Integer>> workouts = new ArrayList<Future<Integer>>();
    ExecutorService ex = Executors.newFixedThreadPool(C.currentWorkers);

    for (TaskWorker worker : workers) {
      workouts.add(ex.submit(worker));
    }
    ex.shutdown();
    try {
      ex.awaitTermination(C.timeout, C.timeoutUnit);
    } catch (InterruptedException e) {
      logger.error(String.format("Timeout on task:%s.", taskId));
      logger.error(e);
    }

    int successCount = 0;
    try {
      for (Future<Integer> workout : workouts) {
        successCount += workout.get() > 0? 1:0;
      }
    } catch (InterruptedException e) {
      logger.error(e);
    } catch (ExecutionException e) {
      logger.error(e);
    }
    
    result = successCount == workers.size();
    return result;
  }