сброс счетчика выше максимального временного интервала в агрегации на основе счетчика Rx - PullRequest
10 голосов
/ 04 марта 2012

Фильтрация на основе количества без ограничения по времени

IObservable filteredStream = changes.Buffer(3);

Как ввести сброс неактивности?

enter image description here

Но как ввести тайм-аут TimeSpan tooLong, чтобы счет начинался с нуля всякий раз, когда интервал между двумя значениями превышает этот максимум?

1 Ответ

3 голосов
/ 05 марта 2012

Я думаю, это то, что вы ищете.

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>
...