using System.Collections.Generic;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Threading.Tasks;
using Microsoft.Reactive.Testing;
using System.Reactive.Linq;
using System.Reactive.Subjects;
public static class ObservableExtension
public static IObservable<T> Pace<T>(this IObservable<T> source, TimeSpan interval)
return source.Select(i => Observable.Empty<T>()
protected static event EventHandler<EventArgs> CancelEvent;
private static BehaviorSubject<double> ActualProgress = new BehaviorSubject<double>(1);
public static void EmitAfter1Second()
Observable.Interval(TimeSpan.FromSeconds(3)).Subscribe(d =>
ActualProgress.OnNext(d);
public static void EmitWithin1Second()
Observable.Interval(TimeSpan.FromMilliseconds(100)).Subscribe(d =>
ActualProgress.OnNext(d);
public static void Main()
.Pace(TimeSpan.FromSeconds(1))
.Subscribe(d => Console.WriteLine(d));
Thread.Sleep(1000 * 60 * 60);