反应性扩展 - 轮询可观察 - 为什么它不会跳过?

时间:2015-01-05 22:22:32

标签: c# system.reactive


       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就会返回IsGood响应,然后返回错误响应。

我只想开始假设它存在并且什么都不做,直到它坏了,此时我只想发布一次错误的响应并完成它。

但观察者每两秒钟会看到一次IsGood响应。任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

要确认丹尼尔的评论,发布的代码最多只能有2个事件 - 一个来自StartWith,另一个来自Take(1)。检查您的假设...您看到的输出来自除订阅发布代码之外的其他内容。

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