Class Select<T>

java.lang.Object
dev.restate.sdk.DurableFuture<T>
dev.restate.sdk.Select<T>
Type Parameters:
T - the output value

public final class Select<T> extends DurableFuture<T>
Select lets you await concurrently for multiple DurableFutures to complete, and for the first one to complete, either return its value directly or map it.

Example:

// Using awakeables as example here
var a1 = ctx.awakeable(String.class);
var a2 = ctx.awakeable(MyObject.class);
var a3 = ctx.awakeable(String.class);

var result = Select.<String>select()
  // Just select the a1 as is
  .or(a1)
  // When selecting a2, map the success result
  .when(a2, myObject -> myObject.toString())
  // When selecting a3, map failure as another failure
  .when(a3, ThrowingFunction.identity(), ex -> {
    throw new TerminalException("a3 failed, too bad!");
  })
  // Finally await for the result
  .await();