Создание наблюдаемой, которая правильно отправляет ошибки? - PullRequest
0 голосов
/ 16 февраля 2012

Я изучаю Rx и прорабатываю некоторую семантику.В качестве эксперимента я строю наблюдаемый таймер, который вызывает OnError на десятом тике.До сих пор у меня есть 2 метода, которые, я считаю, демонстрируют идентичное поведение:

var timer = Observable.Interval(TimeSpan.FromMilliseconds(200));

// method 1
Observable.Create<long>(
    x => timer.Subscribe(tick => {
        if (tick == 10)
        {
            x.OnError(new Exception());
        }

        x.OnNext(tick);
    }));

// method 2
timer.Select(x => {
        if (x == 10)
        {
            throw new Exception();
        }

        return x;
    });

Правильно ли я считаю, что оба эти метода будут вести себя одинаково?Если нет, в чем различия?

1 Ответ

1 голос
/ 16 февраля 2012

2-й способ равен , а не , добавление селектора приводит к неопределенному поведению, которое может выглядеть одинаково ™Вот еще несколько способов:

Observable.Interval(TimeSpan.FromMilliseconds(200))
    .Take(9)
    .Concat(Observable.Throw<long>(new Exception("Die!")));

Observable.Interval(TimeSpan.FromMilliseconds(200))
    .SelectMany(x => {
        if (x < 10) return Observable.Return(x);
        return Observable.Throw<long>(new Exception("Die!"));
    });
...