Как мне мультиплексировать Catch, чтобы он не прерывал мою наблюдаемую?

#c# #system.reactive

#c# #system.reactive

Вопрос:

В качестве отправной точки приведено следующее:

 using System;
using System.Reactive.Linq;
using System.Reactive;
using System.Threading;

public class Program
{
    public static void Main()
    {
        Observable
            .Range(0, 3)
            .Select((iteration) =>
            {
                try
                {
                    if (iteration == 2)
                    {
                        throw new Exception();
                    }

                    return "Success!";
                }
                catch(Exception ex)
                {
                    Console.WriteLine("Caught!");
                    
                    return "Exception!";
                }
            })
            .Do((message) =>
            {
                Console.WriteLine("After: "   message);
            })
            .RunAsync(new CancellationToken())
            .Wait();
    }
}
 

Могу ли я каким-либо образом адаптировать приведенное выше для использования Catch оператора таким образом, чтобы 2-я итерация не приводила к сбою всей цепочки? Возможно, используя SelectMany или Select и Merge ?

Комментарии:

1. Вы уверены, что это не удается? AFAICS наблюдаемое завершается успешно.

2. Да, я знаю, что это работает. Мой вопрос в том, можно ли это адаптировать для использования операторов Catch.

3. Catch Оператор работает с ошибочными последовательностями. Он объединяет вторую последовательность после неудачной. Итак, чтобы использовать этот оператор, вы должны разрешить сбой вашей последовательности, а затем продолжить с новой последовательностью, которая содержит все элементы, которые не были испущены первой последовательностью. Все может запутаться. Я не думаю Catch , что в этом случае вы что-то покупаете.

4. Александр, я сожалею об этом. Я просто пытался быть забавным. Пожалуйста, проигнорируйте мой предыдущий комментарий.

5. @Enigmativity OP, вероятно, использует real (cancelable) CancellationToken в своем реальном приложении в качестве механизма для отмены последовательности.