code: public static <T, X extends Throwable> Tuple3<CompletableFuture<Subscription>, Runnable, CompletableFuture<Boolean>> forEachXWithError(
              final Stream<T> stream, final long x, final Consumer<? super T> consumerElement, final Consumer<? super Throwable> consumerError) {
          return forEachXEvents(stream, x, consumerElement, consumerError, () -> {
          });
      }
docs: Perform a forEach operation over the Stream  without closing it,  capturing any elements and errors in the supplied consumers, but only consuming
  the specified number of elements from the Stream, at this time. More elements can be consumed later, by called request on the returned Subscription
  <pre>
  {@code
  Subscription next = Streams.forEach(Stream.of(()->1,()->2,()->throw new RuntimeException(),()->4)
  .map(Supplier::getValue),System.out::println, e->e.printStackTrace());
  
  System.out.println("First batch processed!");
  
  next.request(2);
  
  System.out.println("Second batch processed!");
  
  //prints
  1
  2
  First batch processed!
  
  RuntimeException Stack Trace on System.err
  
  4
  Second batch processed!
  }
  </pre>
  
  @param stream - the Stream to consume data from
  @param x To consume from the Stream at this time
  @param consumerElement To accept incoming elements from the Stream
  @param consumerError To accept incoming processing errors from the Stream
  @return Subscription so that further processing can be continued or cancelled.