Java 列表流量<;对象>;无阻塞

Java 列表流量<;对象>;无阻塞,java,reactive-programming,project-reactor,graphql-java,Java,Reactive Programming,Project Reactor,Graphql Java,正在查找将磁通量转换为列表。如果使用block(),则获取错误。因此,需要在不阻塞呼叫的情况下进行转换 Flux.from(Collection.find()) 使用反应式编程,但graphql需要列表和返回流量的错误 用Block()编码 在这里,我需要返回列表,因为我由于某种原因无法发送流量。如评论中所述,您不能。反应模式是保持在流程中 所以 Mono=Flux.just(“A”、“B”、“C”) .LIST() .map(this::someMethod); 图形方法(列出abcs){

正在查找将磁通量转换为
列表
。如果使用block(),则获取错误。因此,需要在不阻塞呼叫的情况下进行转换

Flux.from(Collection.find())
使用反应式编程,但graphql需要
列表
和返回流量的错误

用Block()编码


在这里,我需要返回
列表
,因为我由于某种原因无法发送
流量

如评论中所述,您不能。反应模式是保持在流程中

所以

Mono=Flux.just(“A”、“B”、“C”)
.LIST()
.map(this::someMethod);
图形方法(列出abcs){
返回图ql.剂量测定法(abcs);
}

我假设
集合
类来自某个正在执行tcp/http调用的反应器库
collection.find
返回一个
Flux/Mono/Publisher
我假设?这并不是因为
collectList
不允许您这样做,而是因为您试图在
NonBlocking
线程上运行
block
,我假设
collection.find
发布
NonBlocking
实例线程上的元素,从它的名字
reactor-http-kqueue-7
来看,它可能是一个网络线程

您可以查看
BlockingSingleSubscriber.blockingGet
方法,它会告诉您原因

    final T blockingGet() {
        if (Schedulers.isInNonBlockingThread()) {
            throw new IllegalStateException("block()/blockFirst()/blockLast() are blocking, which is not supported in thread " + Thread.currentThread().getName());
        }
...
如果必须从调用程序线程(调用Flux.from)获取结果,那么可以这样做

Flux.from(testCondition.find())
.publishOn(Schedulers.boundedElastic())
.collectList()
.block()

你不能。这需要更多的细节-绝对没有办法以非阻塞方式将
通量
转换为
集合
。解决这个问题的方法有很多-您可以在允许阻塞的情况下切换流量以使用单独的线程,您可以调用订阅链中的graphql库,等等-但是很难/不可能判断哪种方法最适合使用。如果上下文是关于Spring Webflux,你真的不需要,因为框架是隐式订阅flux/mono的;(b) 请始终使用大写字母作为人称代词“I”;(c) 请避免添加问候和感谢等对话材料;(d) 始终使用“预览”窗格,以便查看材质是否已正确渲染。这里需要修复泛型表达式。
Mono<GraphqlResponse> = Flux.just("A", "B" "C")
  .collectList()
  .map(this::someMethod);

GraphqlResponse someMethod(List<String> abcs) {
    return graphQl.doSomething(abcs);
}
    final T blockingGet() {
        if (Schedulers.isInNonBlockingThread()) {
            throw new IllegalStateException("block()/blockFirst()/blockLast() are blocking, which is not supported in thread " + Thread.currentThread().getName());
        }
...
Flux.from(testCondition.find())
.publishOn(Schedulers.boundedElastic())
.collectList()
.block()