Reactive Extensions - 轮询可观察 - 为什么它不会跳过?

Reactive Extensions - polling observable - why won't it skip?


       return Observable
            .Timer(TimeSpan.FromSeconds(2))
            .SelectAsync(delegate { return this.getResponse(request); })
            .Repeat()
            .Timeout(TimeSpan.FromSeconds(10), Observable.Return(new InMemoryDataSetIsGoodResponse(false, "Connection to Mongo timed out after 10 seconds."))
            .SkipWhile(r => r.IsGood)
            .Take(1)
            .StartWith(new InMemoryDataSetIsGoodResponse(true, null)));

我想轮询数据库以确保特定记录仍在数据库中。 getResponse returns 一个 IsGood 响应,只要记录存在,那么它 returns 一个错误的响应。

我只是想从假设它就在那里开始,什么都不做直到它变坏,此时我只想发布一次不好的响应并处理掉它。

但是观察者每两秒看到一个 IsGood 响应。谁能解释一下?

为了确认 Daniel 的评论,已发布的代码最多包含 2 个事件 - 一个来自 StartWith,可能还有一个来自 Take(1)。检查你的假设...你看到的输出来自其他东西而不是订阅发布的代码。

一种可能是您无意中对每个响应的查询进行了新订阅?不过纯属猜测。