class LazyExecutorService implements ExecutorService {

  @CanIgnoreReturnValue
  @Override
  public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
      throws InterruptedException {
    List<Future<T>> result = Lists.newLinkedList();
    try {
      for (Callable<T> task : tasks) {
        result.add(submit(task));
      }
      List<Callable<Void>> monitorTasks = createMonitorTasksFor(result, 0, null);
      backingService.invokeAll(monitorTasks);
    } finally {
      // Clean up. These are no-ops for completed tasks.
      for (Future<T> future : result) {
        future.cancel(true);
      }
    }
    return result;
  }

  public  LazyExecutorService();
  public  LazyExecutorService(ExecutorService backingService);

}