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 буферизует значения из последовательности по два.
Другая последовательность генерируется с интервалом в секунду и объединяется с первой (буферизированной).