subscribe
文件说明:
请记住,由于序列可以是异步的,这将立即将控制返回给调用线程。这会给人一种印象,例如在主线程或单元测试中执行时,使用者没有被调用。
为什么我看到所有的元素都打印出来了?这意味着lambda在主线程中执行
import reactor.core.publisher.Flux;
import java.util.concurrent.TimeUnit;
public class ReactorMain {
public static void main(String[] args) {
Flux.just(1,2,3,4,5,6,7,8,9,10)
.limitRequest(5)
.skip(3)
.subscribe(value -> {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Value: " + value);
})
;
}
}
1条答案
按热度按时间l3zydbqr1#
这是因为生成的值不包含任何异步元素。因此,当您订阅flux时,它将使用当前线程来执行尽可能多的操作,直到异步元素让它等待并使用线程执行其他操作为止。
例如,如果要生成元素,您以异步方式调用web服务,您将以异步方式接收值。
您可以通过使序列延迟来测试它: