Flux.generate((synchronousSink) -> {
synchronousSink.next(1);
//不支持多个next操作
//synchronousSink.next(2);
})
.subscribe(System.out::println);
执行结果: System.out.println(1)被执行无数次
FluxGenerate同FluxCreate一样,对Flux的subscribe方法进行了override。
FluxGenerate#subscribe
public void subscribe(CoreSubscriber<? super T> actual) {
S state;
try {
state = stateSupplier.call();
} catch (Throwable e) {
Operators.error(actual, Operators.onOperatorError(e, actual.currentContext()));
return;
}
//在上面的case中,state和stateConsumer为null
//与其他的sourceProducer主要的差别在GenerateSubscription的实现上
actual.onSubscribe(new GenerateSubscription<>(actual, state, generator, stateConsumer));
}
重点关注GenerateSubscription的实现与之前的Subscription有什么异同
public void request(long n) {
if (Operators.validate(n)) {
if (Operators.addCap(REQUESTED, this, n) ==