私は無知ですが、私はリアクティブエクステンションで少し経験があります。私がしたいことは、このようなものである:項目のすべての時間を発するように観察与え、同時に聞いている間にサブスクライブ中の機能を定期的に呼び出してください
myObservable.Do(d => myObserver.OnNext(d)).Interval(someTime).subscribe({ Run the this code periodically with period T=sometime});
口頭、必要とされるのは、内部の関数を呼び出すためにオブザーバーと期間毎時間T
に連続的に供給にこれらのアイテムですsubscribe
。この機能に言及すると、myObserver
内の一部の機能が呼び出されます。上記のスニペットは機能しません。 myObservable
にはInterval
の定義が含まれていないと言われています。状況に若干の光をあててください。
EDIT:オブザーバーは、着信アイテムを処理します。したがって、私が欲しいのは、すべての時間を聴き、毎晩T
の開始と終了のプロセスを呼び出すことです。このプロセスは、アイテムを収集して格納する必要があります。いくつかのスタートとストップmemorystream
があります。したがって、初めて(StartWith(-1L)
)、観察者は何らかの処理を開始し、T
秒後に、その手順を停止する。この開始および停止ループは定期的に継続する。
EDIT#2:
私はアイテムを発するIObservable<T>
を持っています。これらのアイテムはオブザーバによって受信されます。このオブザーバーは、データを処理できます。私が望むのは、このプロセスを定期的に開始し停止することです。これは、オブザーバが常にデータを受信しなければならないことを意味します。t
このプロセスは、停止している場合は開始するか、すでに開始/実行している場合は停止しなければなりません。このstart()
stop()
関数は、observer.start()およびobserver.stop()のようなオブザーバのメンバです。また、プロセスが実行されている場合、オブザーバ内には真または偽のフラグ/ブール値があります。私は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();
}
});
オブザーバーを参照せずに問題を説明してください。オブザーバーを使用することはおそらく間違ったことです。より基本的な手順で問題を説明できますか? – Enigmativity
@Enigmativity私は自分の投稿にいくつかの変更を加えました。私はそれが助けて欲しいどんな助けも高く評価されます。 – Darkmoor
この問題について間違った解決策を講じています。オブザーバは 'start()'や 'stop()'を持つべきではありません。オブザーバはオブザーバでなければならず、プロセスを制御すべきではありません。また、あなたのオブザーバーが 'IObservable <> 'でもあるなら、あなた自身で実装しているのですが、それは一般的に悪いことです。 – Enigmativity