Skip to content

Instantly share code, notes, and snippets.

@ciniml
Last active August 29, 2015 14:22
Show Gist options
  • Save ciniml/d10b412bccddf9efd8d3 to your computer and use it in GitHub Desktop.
Save ciniml/d10b412bccddf9efd8d3 to your computer and use it in GitHub Desktop.
insert deadtime between items
static IObservable<T> DeadTime<T>(this IObservable<T> source, TimeSpan deadTime)
{
return Observable.Create<T>(o =>
{
var subscriptions = new CompositeDisposable();
var deadTimeTimer = new Subject<IObservable<long>>();
var inDeadTime = false;
subscriptions.Add(
source.Subscribe(
item =>
{
if (!inDeadTime)
{
inDeadTime = true;
deadTimeTimer.OnNext(Observable.Timer(deadTime));
o.OnNext(item);
}
},
o.OnError,
o.OnCompleted)
);
subscriptions.Add(
deadTimeTimer
.Switch()
.Subscribe(_ => inDeadTime = false)
);
return subscriptions;
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment