Я пытаюсь сделать заметным, что при обнаружении ошибки это будет выполнено снова, но что-то заметил, когда «on_error ()» с оператором «retry» выполняется, это только повторно запускаетНаблюдаемый, но текущий экземпляр 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 Object, чтобы при возникновении ошибки ее можно было бы снова перезапустить, но уничтожив ее, в orden для предотвращения исключения переполнения стека
Возможно, существует другой способчтобы сделать это, не могли бы вы помочь мне?