class TaskTerminationExecutor {

    public Mono<Void> terminateTask(String taskId, String reason, String callerId) {
        return findAndVerifyJobAndTask(taskId, reason, callerId)
                .flatMap(jobTaskPair -> {
                    Job<?> job = jobTaskPair.getLeft();
                    Task task = jobTaskPair.getRight();

                    return serializedInvoker
                            .submit(doTerminateTask(taskId, reason, job, task, callerId))
                            .doOnSuccess(next -> onSuccessfulTermination(job, taskId, reason, callerId))
                            .doOnError(error -> onTerminationError(job, taskId, reason, callerId, error));
                });
    }

      TaskTerminationExecutor(EvictionServiceConfiguration configuration,
                            V3JobOperations jobOperations,
                            TitusQuotasManager quotasManager,
                            TitusRuntime titusRuntime,
                            Scheduler scheduler);

}