static <T> StreamMessage<T> of(CompletionStage<? extends StreamMessage<? extends T>> stage,
                                   EventExecutor subscriberExecutor) {
        requireNonNull(stage, "stage");
        requireNonNull(subscriberExecutor, "subscriberExecutor");
        // Have to use DeferredStreamMessage to use the subscriberExecutor.
        final DeferredStreamMessage<T> deferred = new DeferredStreamMessage<>(subscriberExecutor);
        //noinspection unchecked
        deferred.delegateOnCompletion((CompletionStage<? extends Publisher<T>>) stage);
        return deferred;
    }
Creates a new {@link StreamMessage} that delegates to the {@link StreamMessage} produced by the specified
{@link CompletionStage}. If the specified {@link CompletionStage} fails, the returned
{@link StreamMessage} will be closed with the same cause as well.

@param stage the {@link CompletionStage} which will produce the actual {@link StreamMessage}
@param subscriberExecutor the {@link EventExecutor} which will be used when a user subscribes
                          the returned {@link StreamMessage} using {@link #subscribe(Subscriber)}
                          or {@link #subscribe(Subscriber, SubscriptionOption...)}.
core/src/main/java/com/linecorp/armeria/common/stream/StreamMessage.java