简单的问题,我希望:我正在编写一个应用程序,我想从数据库中检索数据;为此,我选择使用Rx将数据库表示为一系列值。
我只想轮询数据库(因此发生我的观察者的通知),最多每5秒一次。现在,我有这样的事情,调度程序正在安排一个周期性任务,导致我的观察者订阅我的数据库的observable:
_scheduler.SchedulePeriodic(_repository, TimeSpan.FromSeconds(5),
(repo) => repo.AsObservable()
.Where(item => _SomeFilter(item))
.Subscribe(item => _SomeProcessFunction(item))
);
为简洁起见省略了功能名称等; repo.AsObservable()
只是一个函数,在该点返回存储库中所有项目的IObservable<T>
。
现在,我认为这是正确的做事方式,但是在我提出这个解决方案之前,我确实提出了一个不同的解决方案,其中我有Observable.Timer
订阅的观察者会订阅相反,每个计时器的AsObservable()
返回值。
我的问题是,这似乎很奇怪 - 为什么我多次订阅这个观察者?
很抱歉,如果这个问题令人困惑,那么在写这篇文章时会让我感到困惑,但是调度程序对我来说也很困惑:P
答案 0 :(得分:6)
如果使用内置运算符而不是手动调度任务会怎样?
repo.AsObservable()
.Where(_SomeFilter)
// Wait 5 seconds before completing
.Concat(Observable.Empty<T>().Delay(TimeSpan.FromSeconds(5))
// Resubscribe indefinitely after source completes
.Repeat()
// Subscribe
.Subscribe(_SomeProcessFunction);