CountDownWatch countdown = new CountDownWatch(timeout, unit);
Execution<RESULT> currentExecution = new FutureBasedExecution<RESULT>(service, executionTask, executionFuture);
// keep scheduling task until we have some time
while (countdown.timeLeft() > 0) {
Execution<RESULT> nextExecution = service.schedule(executionTask, pollInterval, pollUnit);
try {
RESULT result = currentExecution.awaitAtMost(countdown.timeLeft(), countdown.getTimeUnit());