@Override
  public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
      throws InterruptedException {

    List<TrackedCallable<T>> trackedTaskList = executorCore.registerCallableList(tasks);

    return executorCore.trackFutureList(executor.invokeAll(trackedTaskList), trackedTaskList);
  }
  @Override
  public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
      throws InterruptedException, ExecutionException, TimeoutException {

    List<TrackedCallable<T>> trackedTaskList = executorCore.registerCallableList(tasks);

    return executor.invokeAny(trackedTaskList, timeout, unit);
  }
 @Override
 public List<Runnable> shutdownNow() {
   return executorCore.shutdownNow();
 }
 // shutdown/termination functions delegate to the UnstoppableExecutorCore
 @Override
 public void shutdown() {
   executorCore.shutdown();
 }
 @Override
 public void execute(Runnable command) {
   executor.execute(executorCore.registerTask(command));
 }
  @Override
  public Future<?> submit(Runnable task) {
    TrackedRunnable trackedTask = executorCore.registerTask(task);

    return executorCore.trackFuture(executor.submit(trackedTask), trackedTask);
  }
  @Override
  public <T> Future<T> submit(Runnable task, T result) {
    TrackedRunnable trackedTask = executorCore.registerTask(task);

    return executorCore.trackFuture(executor.submit(trackedTask, result), trackedTask);
  }
 @Override
 public <T> Future<T> submit(Callable<T> task) {
   return executor.submit(executorCore.registerTask(task));
 }
 @Override
 public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
   return executorCore.awaitTermination(timeout, unit);
 }
 @Override
 public boolean isTerminated() {
   return executorCore.isTerminated();
 }
 @Override
 public boolean isShutdown() {
   return executorCore.isShutdown();
 }