@Override
 public void execute(Runnable command) {
   executor.execute(executorCore.registerTask(command));
 }
  @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 Future<?> submit(Runnable task) {
    TrackedRunnable trackedTask = executorCore.registerTask(task);

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