using System.Reactive.Linq;
using System.Reactive.Subjects;
namespace ConsoleApplication12
public static void Main(string[] args)
var values = new Subject<int>();
var pauser = new Subject<bool>();
var subscription = values.Pausable(pauser).Subscribe(v => Console.WriteLine(v));
static class ObservableExtensions
public static IObservable<T> Pausable<T>(this IObservable<T> source, IObservable<bool> pauser)
var queue = source.Buffer(pauser.Where(toPause => !toPause),
_ => pauser.Where(toPause => toPause))
.SelectMany(l => l.ToObservable().Do(_ => Console.Write("from queue: ")));
return source.Window(pauser.Where(toPause => toPause).StartWith(true),
_ => pauser.Where(toPause => !toPause))