@Nonnull
    default Promise<V> supplyExceptionally(@Nonnull ThreadContext context, @Nonnull Callable<V> callable) {
        switch (context) {
            case SYNC:
                return supplyExceptionallySync(callable);
            case ASYNC:
                return supplyExceptionallyAsync(callable);
            default:
                throw new AssertionError();
        }
    }
Schedules the supply of the Promise's result, via the given callable.

@param context the type of executor to use to supply the promise
@param callable the callable
@return the same promise
@throws IllegalStateException if the promise is already being supplied, or has already been completed.
helper/src/main/java/me/lucko/helper/promise/Promise.java