C# IObservable сделать Paging

есть метод сервиса, который принимает List и этот сервис выполняет асинхронную обработку List, т.е. в начале делит List на порции и проталкивает порцию на следующую обработку. Проталкивать надо по времени, т.е. каждую порцию раз в 2 сек. Хочу всю обработку внутри сервиса сделать на IObservable.

Например принятый список я преобразовал к IObservable.

IObservable<int> xs = Enumerable.Range(1,10).ToObservable();
//Если был бы метод Paging, то далее проталкивалось бы по 2 элемента раз в сек, и так по циклу.
var xsPaged= xs.Paging(2, TimeSpan.FromSeconds(1));
//0 : 1,2
//1 : 3,4
//2 : 5,6

Как реализовать Paging?


Ответы (1 шт):

Автор решения: Alexander Petrov
IObservable<int> xs = Enumerable.Range(1, 10).ToObservable();

var buffered = xs.Buffer(2);

var pace = Observable
    .Interval(TimeSpan.FromSeconds(1))
    .Zip(buffered, (_, x) => x)
    .Subscribe(x => Console.WriteLine(string.Join(",", x)));

Console.ReadLine();

Метод Buffer буферизует значения из последовательности по два.
Другая последовательность генерируется с интервалом в секунду и объединяется с первой (буферизированной).

→ Ссылка