Кажется, что GroupByUntil выполняет свою задачу:
public static IObservable<IObservable<T>> LazyWindow<T, TClosing>(
this IObservable<T> source, Func<IObservable<TClosing>> windowClose) => source
.GroupByUntil(x => 0, group => windowClose())
.Select(x => (IObservable<T>) x);
РЕДАКТИРОВАТЬ: не используйте null
в качестве постоянного ключа группы, это привело к NRE в рамках.Очень странно.