code: public <T> T callWithTimeout(String description, int timeout, Callable<T> task) {
          Future<T> callFuture = threadPool.submit(task);
          return getWithTimeout(callFuture, timeout, description);
      }
docs: Calls task but ensures it ends.
  @param <T> expected type of return value.
  @param description description of task.
  @param timeout timeout in milliseconds.
  @param task task to execute.
  @return return value from task.