Java 如何等待流动的完成?

Java 如何等待流动的完成?,java,rx-java2,Java,Rx Java2,在RxJava2中,以下是我的代码: public void myMethod(){ 可流动。创建(e->{ //做某事。 },背压等级。缓冲器) .subscribeOn(Schedulers.computation()) .observeOn(Schedulers.io()) .subscribe(新订户(){ @凌驾 公开无效订阅(订阅){//do sth.} @凌驾 下一个(内容和频道VO contentAndChannel){//做某事} @凌驾 (可抛弃的){//做某事} @凌驾 公

在RxJava2中,以下是我的代码:

public void myMethod(){
可流动。创建(e->{
//做某事。
},背压等级。缓冲器)
.subscribeOn(Schedulers.computation())
.observeOn(Schedulers.io())
.subscribe(新订户(){
@凌驾
公开无效订阅(订阅){//do sth.}
@凌驾
下一个(内容和频道VO contentAndChannel){//做某事}
@凌驾
(可抛弃的){//做某事}
@凌驾
公共无效完成({///做某事)
});
doSomething();
}
这里有一个同步问题

我想知道如何让我的方法等待
flowable
onComplete,也就是说
doSomething()
将在
flowable
onCompleted之后调用

我已经搜索了它,但它没有帮助。

您可以使用操作符,但您需要将您的方法包装到另一个可观察对象中

Concat等待订阅您传递的每个附加可观察对象 直到上一个可观察对象完成为止


为此,您必须阻止流的消耗(通常不推荐):

public void myMethod(){
可流动。创建(e->{
//做某事。
},背压等级。缓冲器)
.subscribeOn(Schedulers.computation(),false)
.blockingSubscribe(新订户(){
@凌驾
公开无效订阅(订阅){//do sth.}
@凌驾
下一个(内容和频道VO contentAndChannel){//做某事}
@凌驾
(可抛弃的){//做某事}
@凌驾
公共无效完成({///做某事)
});
doSomething();
}
在这种情况下,拥有
observeOn
是没有意义的。请注意,您必须将
subscribeOn()
false
一起使用,否则流将被锁定

如果源失败,您不想执行
doSomething
,请使用
blockingForEach

public void myMethod() {
    Flowable.create(e -> {
       // do sth.
    }, BackpressureStrategy.BUFFER)
    .subscribeOn(Schedulers.computation(), false)
    .blockingForEach(contentAndChannel -> { /* do sth. */ });

    doSomething();
}