Существует ли функция Rx Framework, которая создает наблюдаемую функцию, которая заканчивается после истечения временного интервала? - PullRequest
2 голосов
/ 23 сентября 2011

Некоторые наблюдаемые просто так нуждаются . Они хотят, чтобы вы слушали, слушали и слушали все, что они могут сказать, может быть, на все времена! Что если я действительно смогу обработать события всего за несколько секунд? Могу ли я написать что-то вроде

mouseMoves.TakeFor(TimeSpan.FromSeconds(2))

Концептуально, это создаст субъект, который будет передавать события до истечения определенного времени, затем отписываться от основной наблюдаемой и отмечать свою собственную последовательность завершенной. Я подозреваю, что вы могли бы написать это таким образом вручную, но, похоже, должны существовать некоторые существующие операторы, которые делают это. Я надеялся, что Observable.TimeOut сделает то, что я хочу, например используя

mouseMoves.Timeout(TimeSpan.FromSeconds(2), Observable.Empty<T>())

Но я думаю, что он делает тайм-аут наблюдаемого, если промежуток времени между наблюдениями больше заданного значения. Это тоже полезно, но не совсем то, что мне нужно.

1 Ответ

4 голосов
/ 23 сентября 2011

Звучит так, как вам нужно TakeUntil:

var source = Observable.FromEventPattern(...);

source.TakeUntil(Observable.Timer(TimeSpan.FromSeconds(2))
   .Subscribe(_ => {});
...