@Override public boolean execute() { if (!ctrl.shouldProceed()) { // schedule deferred so that 'return false' executes first! Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { @Override public void execute() { if (ctrl.isAborted()) { outcome.onFailure(EMPTY_CONTEXT); } else { outcome.onSuccess(EMPTY_CONTEXT); } } }); return false; } else { function.execute(ctrl); return true; } } });