Я думаю, это то, что вы ищете.
var longGap = source.Throttle(tooLong);
var filtered = source
.Window(() => { return longGap; }) // Gives a window between every longGap
.Select(io => io.Buffer(maxItems).Where(l => l.Count == maxItems))
.Switch(); // Flattens the IObservable<IObservable<IList>> to IObservable<IList>