Rx java 保持X个请求并行运行,直到N个请求完成

Rx java 保持X个请求并行运行,直到N个请求完成,rx-java,rx-java2,Rx Java,Rx Java2,我很难为给定的用例找到合适的构造 我有一个函数,可以为给定的输入字符串生成一个单。这个Single是多个任务的组合,预计需要半分钟,但我认为这与问题无关 我试图实现的行为是让其中的5项任务与完成N项任务的目标并行进行。因为这些任务不仅在时间上是昂贵的,而且不应该启动多余的任务,这些任务将在以后被丢弃。以某种方式合并这些任务的结果并不重要,我只是将每个结果保存在onSuccess中 所以基本上我的计划是有一个从0开始的计数器变量。然后,在一个循环中,生成5个Single,将计数器增加5。订阅它们,

我很难为给定的用例找到合适的构造

我有一个函数,可以为给定的输入字符串生成一个
。这个
Single
是多个任务的组合,预计需要半分钟,但我认为这与问题无关

我试图实现的行为是让其中的5项任务与完成N项任务的目标并行进行。因为这些任务不仅在时间上是昂贵的,而且不应该启动多余的任务,这些任务将在以后被丢弃。以某种方式合并这些任务的结果并不重要,我只是将每个结果保存在
onSuccess

所以基本上我的计划是有一个从0开始的计数器变量。然后,在一个循环中,生成5个
Single
,将计数器增加5。订阅它们,
onComplete
增加计数器和
onTerminate
如果
计数器
单曲

然而,最后,我缺少一种跟踪递归生成的
单个
对象的好方法,但我需要等待N完成

是否有一种结构可以使这变得容易,或者我应该尝试使用计数器或一系列的
一次性的

操作符
flatMap()
接受一个附加参数,即它维护的同时订阅数。这是一个测试样本:

@Test
public void testStuff() throws Exception {
    Single<String> source;
    PublishSubject<String> src = PublishSubject.create();
    src
            .flatMap( s -> doStuff( s ).toObservable(), 5 )
            .subscribe( v -> { // process v
            } );
}

Single<String> doStuff( String subject ) {
    return Single.just( subject );
}
@测试
public void testStuff()引发异常{
单一来源;
PublishSubject src=PublishSubject.create();
src
.flatMap->doStuff.toObservable(),5)
.subscribe(v->{//process v
} );
}
单音段(字符串主题){
返回单。刚(主题);
}
如果
doStuff()
返回一个
Single
,则必须将其转换为一个
可观察的
,因为这是
flatMap()
的工作原理