Есть ли способ отменить и заменить наблюдаемую, если она слишком быстро выдает слишком много значений?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ отменить и заменить наблюдаемую, если она слишком быстро выдает слишком много значений?

Сообщение Anonymous »

У меня есть Observable, который выдает значения с переменной скоростью. Чтобы не перегружаться значениями, я добавил дроссель на три секунды, поэтому я получаю значение только в том случае, если в течение трех секунд не публикуются дальнейшие значения. Однако я хочу завершить поток, если я получу определенное количество обновлений в течение определенного периода времени, и заменить его другим наблюдаемым.
Например, если я получу 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»