3
我想了解如何使用rxcpp,我的印象是当observable发出一个值时,所有订阅的观察者都会通过调用他们的on_next()方法来获得通知,将它们的发射值传递给它们。rxcpp - 为什么所有观察者的on_next函数在observable发出值时都会被调用
这是不是与下面的示例中的情况:我所期望的输出是这样的
auto eventloop = rxcpp::observe_on_event_loop();
printf("Start task\n");
auto values = rxcpp::observable<>::interval(std::chrono::seconds(2)).map(
[](int i){
printf("Observable sending: %d\n", i);
return i;
}
);
values.
subscribe_on(eventloop).
take(2).
as_blocking().
subscribe(
[](int v){printf("#1 onNext: %d\n", v);},
[](){printf("#1 onCompleted\n");});
values.
subscribe_on(eventloop).
take(2).
as_blocking().
subscribe(
[](int v){printf("#2 onNext: %d\n", v);},
[](){printf("#2 onCompleted\n");});
printf("Finish task\n");
:
Start task
Observable sending: 1
#1 onNext: 1
#2 onNext: 1
Observable sending: 2
#1 onNext: 2
#1 onCompleted
#2 onNext: 2
#2 onCompleted
Finish task
即on_next上的所有订阅观察者被调用时,新的值来通过。
相反,输出居然是:
Start task
Observable sending: 1
#1 onNext: 1
Observable sending: 2
#1 onNext: 2
#1 onCompleted
Observable sending: 1
#2 onNext: 1
Observable sending: 2
#2 onNext: 2
#2 onCompleted
Finish task
使用as_blocking()将阻止第二个订阅开始,直到第一个完成 –