1

RX シーケンスをアップサンプリングするには、つまり、より頻繁にトリガーするにはどうすればよいですか?

.Sample 演算子は、ダウンサンプリングのみを許可します。

IObservable<long> source = Observable.Interval(TimeSpan.FromMilliseconds(5000));
IObservable<long> trigger = Observable.Interval(TimeSpan.FromMilliseconds(1000));

//var triggeredSource = source.Sample(trigger);
var triggeredSource = source.Sample(TimeSpan.FromMilliseconds(1000)); 

source.Subscribe(Console.WriteLine);
triggeredSource.Subscribe(Console.WriteLine);

ここで、triggeredSource は 1000 ミリ秒ではなく 5000 ミリ秒ごとにのみ起動します。欲しいもの:

source:  ----a----b----c----d------
trigger: -o-o-o-o-o-o-o-o-o-o-o-o-o
result:  ----aa-a-b-b-bcc-c-d-d-d-d

これはどのように行うことができますか?

4

1 に答える 1

2

を使用して必要な動作を取得できますCombineLatest-概念的には、Get Last Valueプラス aMergeです。

[編集: コメントでこれについて言及した投稿後に初めて気づきました - おそらく最も「効率的な」方法です]

IObservable<long> source = Observable.Interval(TimeSpan.FromMilliseconds(500));
IObservable<long> trigger = Observable.Interval(TimeSpan.FromMilliseconds(100));

var triggeredSource = source.CombineLatest(trigger, (src, trig) => src);

using(triggeredSource.Subscribe(Console.WriteLine))
{
    Console.ReadLine();
}
于 2013-02-12T15:52:38.913 に答える