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响应。谁能解释一下?

最佳答案

为了确认Daniel的评论,已发布的代码最多包含2个事件-一个事件来自StartWith,可能一个事件来自Take(1)。检查您的假设...您看到的输出来自订阅发布代码以外的其他内容。

一种可能是您无意间对每个响应都对该查询进行了新的预订?虽然纯粹是猜测。

10-06 03:00