RxJava2 connectableObservables-autoConnect(2)-为什么不等待2个订阅者调用connect?

时间:2018-11-18 06:13:56

标签: rx-java2

我创建了一个connectedObservable,如下所示:

final List<Integer> list = new ArrayList<Integer>();
        for(int j=1;j<=3;j++)
            list.add(j);

        Observable<Integer> observable = Observable.fromIterable(list);

这个可观察到的发射1、2、3

现在我以这种方式将其转换为connectableObservable:

observable.publish().autoConnect(2);
因此,我期望自从2传递给autoConnect以来,直到找到2个订阅者,它才会触发。但相反,它仅在找到的1个订阅者上执行。

让我告诉你我尝试过的事情:

observable.subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer)  {
                Log.v("consumer1:", ""+integer);

            }
        });

我希望它不会在日志中打印任何内容。但是我得到以下信息:

consumer1:: 1
consumer1:: 2
consumer1:: 3
  

根据to the documentation在autoConnect(int   numberOfSubscribers):

* @param numberOfSubscribers the number of subscribers to **await** before calling connect
 *                            on the ConnectableObservable. A non-positive value indicates
 *                            an immediate connection.

1 个答案:

答案 0 :(得分:0)

在RxJava中,您不应忽略运算符的返回值:

Observable<Integer> shared = observable.publish().autoConnect(2);

shared.subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer)  {
            Log.v("consumer1:", ""+integer);
        }
    });

shared.subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer)  {
            Log.v("consumer2:", ""+integer);
        }
    });

推荐阅读:https://github.com/ReactiveX/RxJava#simple-background-computation