Платформа .NET Reactive: ReplaySubject OnError: Почему выдается исключение? - PullRequest
3 голосов
/ 24 мая 2011

Примечание. Я имею в виду версию RX .NET 4.

Я использую класс ReplaySubject для RX.Я вызываю OnError с исключением в качестве параметра.

Я ожидал, что он уведомит всех подписчиков OnError и передаст им исключение, вместо этого он просто выдает исключение, а после этого исключение просто переходитнеобработанный.

Код очень прост, вы можете взглянуть на код на GitHub.https://github.com/arielbh/CodeCommander/blob/master/CodeValue.CodeCommander/CommandBase.cs Строка 117 - это вызов OnNext.

Есть идеи?очевидно, я хочу, чтобы поведение, которое я ожидаю, произошло.Спасибо

Ариэль

Ответы [ 2 ]

1 голос
/ 24 мая 2011

ОК, я выяснил причину этого.Если вы не подписаны на OnError, то поведение по умолчанию вызывает исключение.Я не был достаточно осторожен, поэтому субъект, который вызывает ошибку, не наблюдался.

Дополнительная информация: http://social.msdn.microsoft.com/Forums/en/rx/thread/3125094b-1ab2-4d01-8f44-fb68ef913f43

0 голосов
/ 10 сентября 2015

У меня тоже странное поведение.Я создал собственный метод расширения, чтобы получить ожидаемое поведение.

    public static void SendOnError<T, E>(this IObserver<T> Subject, E ExceptionToSend) where E : Exception
    {
        try { Subject?.OnError(ExceptionToSend); }
        catch (E exception)
        {
            Debug.WriteLine("One or more subscribers to the subject did not implement an OnError handler. Ignoring rethrown exception: " + exception.Message);
        }
    }
...