C# 在同时侦听的同时,在subscribe中定期调用函数

C# 在同时侦听的同时,在subscribe中定期调用函数,c#,asynchronous,system.reactive,reactive-programming,C#,Asynchronous,System.reactive,Reactive Programming,请原谅我的无知,但我在被动扩展方面有一点经验。我想要的是这样的东西: myObservable.Do(d => myObserver.OnNext(d)).Interval(someTime).subscribe({ Run the this code periodically with period T=sometime}); TimeSpan someTime = TimeSpan.FromMinutes(1.0); IObservable<long> myObserva

请原谅我的无知,但我在被动扩展方面有一点经验。我想要的是这样的东西:

myObservable.Do(d => myObserver.OnNext(d)).Interval(someTime).subscribe({ Run the this code periodically with period T=sometime});
TimeSpan someTime = TimeSpan.FromMinutes(1.0);
IObservable<long> myObservable = Observable.Interval(someTime);
从口头上讲,如果一个可观察对象一直发射项目,则需要将这些项目连续馈送给观察者,并在每个时段
T
调用
subscribe
中的函数。只要提到这个函数,就会调用
myObserver
中的一些函数。上面的代码段不起作用。它表示
myObservable
不包含
Interval
的定义。你能解释一下情况吗

编辑:观察者,处理传入的项目。因此,我想要的是一直听,并在每个
T
调用启动和停止进程。这个过程需要收集物品并存储它们。有一些启动和停止
memorystream
。因此,在第一时间(
StartWith(-1L)
),观察者启动一些处理,并在
T
秒后停止该过程。这个启动和停止循环周期性地继续


编辑#2:

我有一个
IObservable
,可以发射项目。这些物品由观察员接收。这个观察者可以处理数据。我想要的是定期启动和停止这个过程。这意味着观察者应始终接收数据,并且在一段时间内,如果该过程已停止,则必须启动该过程;如果该过程已启动/运行,则必须停止该过程。此
start()
stop()
函数是观察者的成员,即observer.start()和observer.stop()。此外,如果进程正在运行,观察者内部还有一个标志/布尔值,该标志/布尔值为true或false。我认为
Interval
应该可以工作,但不适用于
IObservable
。你能解释一下情况吗

编辑#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();

        }
    });
observable.subscribe(oberver)//观察者始终在侦听
TimeSpan某时=TimeSpan.FromMinutes(1.0);
IObservable myObservable=可观测的间隔(有时);
myObservable.Subscribe(d=>
{
如果(!observer.isProcessing)
{
observer.Start();
}else if(observer.isProcessing)
{
观察者停止();
}
});

Interval
是一种静态方法,直接脱离
可观察的
——它不是
可观察的
接口的一部分。您可以这样使用它:

myObservable.Do(d => myObserver.OnNext(d)).Interval(someTime).subscribe({ Run the this code periodically with period T=sometime});
TimeSpan someTime = TimeSpan.FromMinutes(1.0);
IObservable<long> myObservable = Observable.Interval(someTime);

我不知道你为什么那样调用
myObserver.OnNext(d)
。看起来有点像密码的味道。如果你能为你的问题添加更多的细节,那么也许我也能在这一部分提供帮助。

Interval
是一种直接脱离
Observable
的静态方法-它不是
ioobservable
界面的一部分。您可以这样使用它:

myObservable.Do(d => myObserver.OnNext(d)).Interval(someTime).subscribe({ Run the this code periodically with period T=sometime});
TimeSpan someTime = TimeSpan.FromMinutes(1.0);
IObservable<long> myObservable = Observable.Interval(someTime);

我不知道你为什么那样调用
myObserver.OnNext(d)
。看起来有点像密码的味道。如果你能为你的问题添加更多细节,那么我也可以在这一部分提供帮助。

谢谢你的回答。
myObservable
发送一些数据(更准确地说是数据结构),这些数据必须传递到
myObserver
。这就是为什么我需要
.Do(d=>myObserver.OnNext(d))
。我认为
IObservable
不完全适合我的需要。我们可以用其他方法吗?再次感谢。如果您需要其他详细信息,请告诉我。另外,请不要忘记,文章中的代码示例是为了提供问题的一般概述,注意我需要类似于
Interval
的内容。再次感谢。@Darkmoor-我想你问了一个X-Y问题。你认为Y是你问题X的答案,所以你问了如何做Y。我认为你应该问如何做X。你和我在一起吗?我想我找到了我需要的东西,感谢讨论和你的兴趣。请参见编辑3。尽管如此,我很好奇我们能否将这两部分结合起来。有可能是这样吗?@Darkmoor-我不能在自己无法运行的情况下对你的代码发表评论。未定义
.Start()
.Stop()
方法。在我看来,您只是在尝试调整观察器代码的调用速度<代码>间隔已经为您完成了。我认为你需要重新思考你在做什么。如果你能告诉我们你要解决的实际问题,那就太有用了。谢谢你的回答。
myObservable
发送一些数据(更准确地说是数据结构),这些数据必须传递到
myObserver
。这就是为什么我需要
.Do(d=>myObserver.OnNext(d))
。我认为
IObservable
不完全适合我的需要。我们可以用其他方法吗?再次感谢。如果您需要其他详细信息,请告诉我。另外,请不要忘记,文章中的代码示例是为了提供问题的一般概述,注意我需要类似于
Interval
的内容。再次感谢。@Darkmoor-我想你问了一个X-Y问题。你认为Y是你问题X的答案,所以你问了如何做Y。我认为你应该问如何做X。你和我在一起吗?我想我找到了我需要的东西,感谢讨论和你的兴趣。请参见编辑3。尽管如此,我很好奇我们能否将这两部分结合起来。有可能是这样吗?@Darkmoor-我不能在自己无法运行的情况下对你的代码发表评论。未定义
.Start()
.Stop()
方法。在我看来,您只是在尝试调整观察器代码的调用速度<代码>间隔已经为您完成了。我认为你需要重新思考你在做什么。如果你能告诉我们你要解决的实际问题,那就太有用了。试着解释一下这个问题,不要向观察家求助。以这种方式使用观察者可能是错误的