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)
。检查你的假设...你看到的输出来自其他东西而不是订阅发布的代码。
一种可能是您无意中对每个响应的查询进行了新订阅?不过纯属猜测。
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)
。检查你的假设...你看到的输出来自其他东西而不是订阅发布的代码。
一种可能是您无意中对每个响应的查询进行了新订阅?不过纯属猜测。