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

本文关键字:为什么 扩展 观察 反应式 | 更新日期: 2023-09-27 18:36:15


       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)。检查您的假设...您看到的输出来自发布代码订阅以外的其他内容。

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