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()
的工作原理