我正在尝试制作一个可观察的,当检测到错误时,这将再次执行,但确实注意到了一些事情,当执行带有“重试”运算符的“on_error()”时,这只会再次重新运行 Observable 但是, Observable 的当前实例仍然在当前堆栈中,换句话说仍然活着
我做了一个测试来验证行为
#include <string>
#include "rxcpp/rx.hpp"
class test_class
{
public:
int a;
test_class() {
printf("Create Obj \n");
a = 1;
}
~test_class() {
printf("Destroy Obj \n");
a = 0;
}
};
int main()
{
// Create Observable request
auto values = rxcpp::observable<>::create<std::string>(
[&](rxcpp::subscriber<std::string> subscriber) {
test_class test;
while (subscriber.is_subscribed()) {
std::exception_ptr eptr = std::current_exception();
subscriber.on_error(eptr);
int a;
a = 2;
subscriber.on_next("normal");
}
})
.retry()
.as_dynamic();
values.
subscribe(
[](std::string v) {
printf("OnNext: %s\n", v.c_str()); },
[](std::exception_ptr ep) {
printf("OnError: %s\n", rxcpp::util::what(ep).c_str()); },
[]() {
printf("OnCompleted\n"); });
}
所以,我的输入输出是
Create Obj
Create Obj
Create Obj
Create Obj
...
我确实希望看到“Destroy Obj”输出
我也有堆栈溢出异常
我的目标是,执行一个 Observable 对象,当触发错误时,这可能会再次重新启动,但会破坏当前对象,以防止堆栈溢出异常
也许还有另一种方法可以做到这一点,你能帮我吗?