たくさんのイベントが入ってきて、それらすべてを損失なく実行する必要がありますが、それらが適切なタイムスロットでバッファリングされ、消費されるようにしたいと考えています。誰にも解決策がありますか?
イベントを失うことなくそれを行うことができる Rx のオペレーターを見つけることができません (スロットル - イベントを失います)。Buffered、Delayなども検討しました...良い解決策が見つかりません。
真ん中にタイマーを入れようとしましたが、どういうわけかまったく機能しません:
GetInitSequence()
.IntervalThrottle(TimeSpan.FromSeconds(5))
.Subscribe(
item =>
{
Console.WriteLine(DateTime.Now);
// Process item
}
);
public static IObservable<T> IntervalThrottle<T>(this IObservable<T> source, TimeSpan dueTime)
{
return Observable.Create<T>(o =>
{
return source.Subscribe(x =>
{
new Timer(state =>
o.OnNext((T)state), x, dueTime, TimeSpan.FromMilliseconds(-1));
}, o.OnError, o.OnCompleted);
});
}