Github user aledsage commented on a diff in the pull request: https://github.com/apache/brooklyn-server/pull/816#discussion_r140608140 --- Diff: core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java --- @@ -100,6 +123,121 @@ public ExecutionManager getExecutionManager() { @Override public Set<Task<?>> getTasks() { return executionManager.getTasksWithAllTags(tags); } + @Override + public <T> T get(TaskAdaptable<T> task) { + final TaskInternal<T> t = (TaskInternal<T>) task.asTask(); + + if (t.isQueuedOrSubmitted()) { + if (t.isDone()) { + return t.getUnchecked(); + } else { + throw new ImmediateUnsupportedException("Task is in progress and incomplete: "+t); + } + } + + ContextSwitchingInfo<T> switchContextWrapper = getContextSwitchingTask(t, Collections.emptyList(), false); + if (switchContextWrapper!=null) { + return switchContextWrapper.context.get(switchContextWrapper.wrapperTask); + } + + try { + return runInSameThread(t, new Callable<Maybe<T>>() { + public Maybe<T> call() throws Exception { + return Maybe.of(t.getJob().call()); + } + }).get(); + } catch (Exception e) { + throw Exceptions.propagate(e); + } + } + + private static class SimpleFuture<T> implements Future<T> { --- End diff -- Instead use guava's `SettableFuture`?
---