docs: public Task<Void> continueWhile(final Callable<Boolean> predicate,
        final Continuation<Void, Task<Void>> continuation, final Executor executor,
        final CancellationToken ct) {
      final Capture<Continuation<Void, Task<Void>>> predicateContinuation =
          new Capture<>();
      predicateContinuation.set(new Continuation<Void, Task<Void>>() {
        @Override
        public Task<Void> then(Task<Void> task) throws Exception {
          if (ct != null && ct.isCancellationRequested()) {
            return Task.cancelled();
          }
  
          if (predicate.call()) {
            return Task.<Void> forResult(null).onSuccessTask(continuation, executor)
                .onSuccessTask(predicateContinuation.get(), executor);
          }
          return Task.forResult(null);
        }
      });
      return makeVoid().continueWithTask(predicateContinuation.get(), executor);
    }