diff options
Diffstat (limited to 'org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/environment/Future.java')
-rw-r--r-- | org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/environment/Future.java | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/environment/Future.java b/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/environment/Future.java index 605b7dcb7..ffd1197db 100644 --- a/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/environment/Future.java +++ b/org.eclipse.scout.sdk.core.s/src/main/java/org/eclipse/scout/sdk/core/s/environment/Future.java @@ -16,13 +16,14 @@ import java.util.concurrent.CompletionException; import java.util.function.Supplier; import org.eclipse.scout.sdk.core.log.SdkLog; +import org.eclipse.scout.sdk.core.util.FinalValue; /** * <h3>{@link Future}</h3> * * @since 7.1.0 */ -public class Future<V> extends CompletableFuture<V> implements IFuture<V> { +public class Future<V> extends CompletableFuture<Supplier<V>> implements IFuture<V> { /** * Creates a completed {@link IFuture} with the specified result. @@ -93,10 +94,10 @@ public class Future<V> extends CompletableFuture<V> implements IFuture<V> { @Override public Future<V> awaitDoneThrowingOnError() { try { - result(); + join(); } catch (CancellationException e) { - SdkLog.debug("Canellation silently ignored", e); + SdkLog.debug("Cancellation silently ignored", e); } return this; } @@ -108,10 +109,11 @@ public class Future<V> extends CompletableFuture<V> implements IFuture<V> { else { if (error == null) { if (resultExtractor == null) { - complete(null); + complete(() -> null); // the supplier should never be null. only the result provided by the supplier may be null } else { - complete(resultExtractor.get()); + FinalValue<V> cachedResult = new FinalValue<>(); + complete(() -> cachedResult.computeIfAbsentAndGet(resultExtractor)); } } else { @@ -124,7 +126,7 @@ public class Future<V> extends CompletableFuture<V> implements IFuture<V> { @Override public V result() { try { - return join(); + return join().get(); } catch (CompletionException e) { SdkLog.debug("Future completed with errors.", e); |