У меня есть следующая проблема: у меня есть тема, которая использует метод OnNext для сигнализации новых событий. Однако может возникнуть исключение, которое имитируется в коде ниже с вызовом метода OnError. Причина ошибки зависит от времени, поэтому, если я попытаюсь повторить одно и то же действие снова несколько раз, это будет успешным. Поэтому я хочу использовать метод catch, который принимает функцию, генерирующую новые последовательности, чтобы повторить действие, скажем, 5 раз. Если всякая повторная попытка завершается неудачей, тогда она должна выдать окончательное исключение, и если хотя бы один из них будет успешным, он должен продолжить работу с OnNext (5) и OnNext (6).Как повторить действие OnError reactive X IObservable несколько раз, и если успешно продолжить
В идеале исключение и последующий вызов OnError следует предотвращать, но это не в моем случае.
Я пробовал несколько сценариев, используя методы Retry, Concat, Catch и т. Д., Но ничего не работало так, как я хотел.
Subject<int> sub = new Subject<int>();
var seq = sub.Select(x =>
{
//time dependent operation
Console.WriteLine(x);
return x;
}).
Catch((SeqException<int> ex) =>
{
return Observable.Empty(0); // what sequece to return to achieve the desired behaviour
});
seq.Subscribe();
sub.OnNext(1);
sub.OnNext(2);
sub.OnNext(3);
sub.OnError(new SeqException<int>{ Value = 4});
sub.OnNext(5);
sub.OnNext(6);
seq.Wait();
Заранее спасибо.
привет, ваш пример довольно интересен, хотя ваш случай 2 к сожалению, правильно, поэтому мне придется подумать о том, как решить эту проблему. Если больше ответов не появится, я соглашусь с этим, спасибо –
Если сторонний код принимает 'ISubject', возможно, вы можете сделать один раз, который, наконец, испустит« Уведомление ». –
Asti