diff --git a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/model/implementation/CreatorTaskItem.java b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/model/implementation/CreatorTaskItem.java index eee27b0b5d18..2a1a5f7f270d 100644 --- a/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/model/implementation/CreatorTaskItem.java +++ b/azure-mgmt-resources/src/main/java/com/microsoft/azure/management/resources/fluentcore/model/implementation/CreatorTaskItem.java @@ -30,17 +30,13 @@ public ResourceT result() { @Override public Observable executeAsync() { - if (this.created == null) { - return this.resourceCreator.createResourceAsync() - .subscribeOn(Schedulers.io()) - .doOnNext(new Action1() { - @Override - public void call(ResourceT resourceT) { - created = resourceT; - } - }); - } else { - return Observable.just(created); - } + return this.resourceCreator.createResourceAsync() + .subscribeOn(Schedulers.io()) + .doOnNext(new Action1() { + @Override + public void call(ResourceT resourceT) { + created = resourceT; + } + }); } } diff --git a/runtimes/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java b/runtimes/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java index 747f0273fa7d..6de2a3ab4654 100644 --- a/runtimes/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java +++ b/runtimes/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java @@ -64,18 +64,31 @@ public Observable executeAsync() { final List> observables = new ArrayList<>(); while (nextNode != null) { final DAGNode thisNode = nextNode; - observables.add(nextNode.data().executeAsync() - .flatMap(new Func1>() { - @Override - public Observable call(T t) { - dag().reportedCompleted(thisNode); - if (dag().isRootNode(thisNode)) { - return Observable.just(t); - } else { + T cachedResult = nextNode.data().result(); + if (cachedResult != null && !this.dag().isRootNode(nextNode)) { + observables.add(Observable.just(cachedResult) + .flatMap(new Func1>() { + @Override + public Observable call(T t) { + dag().reportedCompleted(thisNode); return executeAsync(); } - } - })); + }) + ); + } else { + observables.add(nextNode.data().executeAsync() + .flatMap(new Func1>() { + @Override + public Observable call(T t) { + dag().reportedCompleted(thisNode); + if (dag().isRootNode(thisNode)) { + return Observable.just(t); + } else { + return executeAsync(); + } + } + })); + } nextNode = dag.getNext(); } return Observable.merge(observables);