【问题标题】:Reactive Extensions - polling observable - why won't it skip?反应式扩展 - 轮询可观察 - 为什么不跳过?
【发布时间】:2015-01-07 21:47:16
【问题描述】:

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

【问题讨论】:

  • 无论Take(1) 之前的所有内容如何,​​观察者最多应该看到 2 个值。您能否发布一些您如何订阅的代码。

标签: c# system.reactive


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我仍在努力寻找答案,但你的言论和丹尼尔让我满意,这不是我的 observable,而是订阅。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 2020-01-01
相关资源
最近更新 更多