创建一个正确调度错误的observable?

时间:2012-02-16 04:41:05

标签: c# system.reactive

我正在学习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 个答案:

答案 0 :(得分:1)

第二种方式是等效,投掷选择器导致可能发生的未定义行为看起来相同。以下是其他几种方式:

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!"));
    });
相关问题