Open
Description
Currently there is no operator to ignore elements from an observable sequence that follow a non-ignored element within a specified relative time duration. This is what would normally be called Throttle
, while the existing Throtte
operator is really a debounce operator (see e.g. The Difference Between Throttling and Debouncing).
Here is a sample implementation of the "real" throttle operator both with and without scheduler:
public static IObservable<TSource> AtMostOnceEvery<TSource>(
this IObservable<TSource> source,
TimeSpan dueTime)
{
IObservable<TSource> delay = Observable.Empty<TSource>().Delay(dueTime);
return source.Take(1).Concat(delay).Repeat();
}
public static IObservable<TSource> AtMostOnceEvery<TSource>(
this IObservable<TSource> source,
TimeSpan dueTime,
IScheduler scheduler)
{
IObservable<TSource> delay = Observable.Empty<TSource>().Delay(dueTime, scheduler);
return source.Take(1).Concat(delay).Repeat();
}