请原谅我无知,但我对Reactive扩展有一点经验。我想要的是这样的:
myObservable.Do(d => myObserver.OnNext(d)).Interval(someTime).subscribe({ Run the this code periodically with period T=sometime});
口头上,给定一个可以随时发出项目的观察者,需要将这些项目连续地送入观察者并且每个时间段T
调用subscribe
内的函数。只需提及此函数即可调用myObserver
内的一些函数。以上代码段不起作用。它说myObservable
不包含Interval
的定义。你能否对这种情况有所了解?
编辑:观察者,处理传入的项目。因此,我想要的是一直倾听,并且每T
调用一个开始和停止过程。这个过程必须收集物品并存储它们。有一些开始和停止memorystream
。因此,在第一次(StartWith(-1L)
)中,观察者启动一些处理,并在T
秒之后停止该过程。此启动和停止循环定期继续。
编辑#2:
我有IObservable<T>
发出物品。这些物品由观察员接收。这个观察者可以处理数据。我想要的是定期开始和停止这个过程。这意味着观察者应该始终在t
的时间段内接收数据,如果停止则该过程必须开始,如果已经开始/正在运行则必须停止。这个start()
stop()
函数是观察者的成员,即observer.start()和observer.stop()。此外,观察者内部还有一个标志/布尔值,如果进程正在运行,则为true或false。我认为Interval
应该有效,但不适用于IObservable<T>
。你能否对这种情况有所了解?
修改#3 由于讨论,我想我找到了我需要的东西。
observable.subscribe(oberver) // observer always listening
TimeSpan someTime = TimeSpan.FromMinutes(1.0);
IObservable<long> myObservable = Observable.Interval(someTime);
myObservable.Subscribe(d =>
{
if (!observer.isProcessing)
{
observer.Start();
}else if (observer.isProcessing)
{
observer.Stop();
}
});
答案 0 :(得分:2)
Interval
是Observable
之外的静态方法 - 它不是IObservable<T>
接口的一部分。你可以这样使用它:
TimeSpan someTime = TimeSpan.FromMinutes(1.0);
IObservable<long> myObservable = Observable.Interval(someTime);
现在你可以继续编写你想要的代码:
myObservable
.Do(d => myObserver.OnNext(d))
.Subscribe(d =>
{
//Run the this code periodically with period T=sometime
});
我不确定你为什么这样打myObserver.OnNext(d)
。它看起来有点像代码味道。如果你可以在你的问题中添加更多细节,那么也许我也可以帮助你。