Reactor:Flux .subscribe()与.toStream()

问题描述 投票:0回答:1

我有一个函数:Flux queryPerson(),它查询数据库以生成对象并以Flux返回它们。当我使用.subscribe()时,该应用程序仅通过代码运行并退出。它不等待结果返回查询。但是当我使用.toStream()阻止流时,我可以看到打印输出。我在做什么错?

personRepository
    .queryPerson()
    .map(x -> x.getFirst().concat("ok"))
    .subscribe(i -> System.out.println(i))
    //.toStream().forEach(System.out::println)
;
java flux reactor spring-reactive
1个回答
2
投票

我假设您没有某种Web应用程序,而是命令行运行器或简单的Java应用程序。考虑到应用程序在异步任务之前完成是正常的。

。subscribe

订阅是一种使用传入数据的异步方法,订阅Flux后,您立即将控制权返回给调用线程。

这正是反应式编程的工作方式,您定义了行为,并且具有在其他线程中以及与您的调用线程一起运行它的不错的抽象方法。

Flux docs中所述

由于序列可以是异步,因此将立即返回控制到调用线程。这可以给人的印象在主线程或单元测试中执行时,不会调用使用者例如。

。toStream

另一方面,使用。toStream您会收到一个Java Stream,即使它的大小未知,您仍然像普通Java Stream一样以同步方式对其进行迭代。

可以在.toStream docs of Flux中找到更多说明

© www.soinside.com 2019 - 2024. All rights reserved.