Например, если я получу 50 обновлений в течение трех секунд, завершите поток и замените его другим потоком, аналогично тому, как Catch может заменить наблюдаемый объект, который был завершен из-за исключения, другим.
Что-то вроде приведенного ниже, но без исключения. меня бросают, поэтому нельзя использовать Catch:
Код: Выделить всё
myObservable
.Throttle(TimeSpan.FromSeconds(3)) //Not sure if we need to remove Throttle
.Catch(e => Observable.Return(long)0) //Instead of catching an exception, some way to monitor how many updates are coming in before throttling
.Subscribe
Я добавил мраморную диаграмму, чтобы показать, что я ищу.
Начальная наблюдаемая производит значения с переменной скоростью. Поступают значения 1–6, ни одного в пакете из 50 за 3 секунды, и эти значения передаются на дросселирование, и создаются окончательные значения 1, 5 и 6.
Затем исходная наблюдаемая выдает значения 7–60 в течение 3 секунд. Вот где я пытаюсь сделать то, что "???" показывает. Идея заключалась в том, чтобы признать, что 50 или более предметов были произведены в установленные сроки, и завершить первоначальные наблюдения. и замените его тем, который я предоставлю, аналогично тому, как вы можете предоставить файл obs. последовательность в Catch, чтобы заменить ту, в которой возникла ошибка (например, если я увидел, что исходная последовательность произвела такой огромный всплеск и выдала исключение).
После первоначального obs. заменяется, последовательность продолжается с новой, при этом произведенные элементы проходят существующий контроль.
Если только 49 элементов попадают в интервал времени, отмеченный знаком "???", эти значения все они перейдут в Throttle, и будет произведен только последний. Если никаких обновлений не поступает вообще, ничего не происходит и вывод не производится.
Надеюсь, теперь то, о чем я спрашиваю, стало немного более понятным.

Подробнее здесь: https://stackoverflow.com/questions/781 ... too-many-v
Мобильная версия