2017-05-10 1 views
0

私は無知ですが、私はリアクティブエクステンションで少し経験があります。私がしたいことは、このようなものである:項目のすべての時間を発するように観察与え、同時に聞いている間にサブスクライブ中の機能を定期的に呼び出してください

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(); 

     } 
    }); 
+0

オブザーバーを参照せずに問題を説明してください。オブザーバーを使用することはおそらく間違ったことです。より基本的な手順で問題を説明できますか? – Enigmativity

+0

@Enigmativity私は自分の投稿にいくつかの変更を加えました。私はそれが助けて欲しいどんな助けも高く評価されます。 – Darkmoor

+0

この問題について間違った解決策を講じています。オブザーバは 'start()'や 'stop()'を持つべきではありません。オブザーバはオブザーバでなければならず、プロセスを制御すべきではありません。また、あなたのオブザーバーが 'IObservable <> 'でもあるなら、あなた自身で実装しているのですが、それは一般的に悪いことです。 – Enigmativity

答えて

2

Interval直接Observableのオフ静的メソッドである - それはIObservable<T>インタフェースの一部ではありません。私はなぜあなたがそのようなmyObserver.OnNext(d)を呼び出しているかわからない

myObservable 
    .Do(d => myObserver.OnNext(d)) 
    .Subscribe(d => 
    { 
     //Run the this code periodically with period T=sometime 
    }); 

TimeSpan someTime = TimeSpan.FromMinutes(1.0); 
IObservable<long> myObservable = Observable.Interval(someTime); 

今、あなたが先に行くとあなたが欲しいのコードを書くことができます:あなたはこのようにそれを使用します。それはコードのにおいのようです。あなたがあなたの質問にさらに詳細を加えることができれば、おそらく私はその部分を手伝うことができます。

+0

お返事ありがとうございます。 'myObservable'は、' myObserver'に渡されなければならないデータ(より正確なデータ構造体)を送ります。私は '.Do(d => myObserver.OnNext(d))'が必要なのです。私は 'IObservable 'が私のニーズに正確に合わないと思います。何か他の方法でそれをやることはできますか?再度、感謝します。 – Darkmoor

+0

他の詳細が必要な場合はお知らせください。また、ポストのコード例は、私が 'Interval'のようなものが必要であることを伝える問題の一般的な概要を示すために提供されたものではありません。再度、感謝します。 – Darkmoor

+1

@Darkmoor - あなたはX-Yの質問をしたと思います。あなたはYがあなたの問題Xに対する答えだと思うので、Yのやり方を尋ねました。あなたは私にXのやり方を尋ねるべきだと思います。 – Enigmativity

関連する問題