У меня есть две наблюдаемые. Один из них Observable.fromEvent(..)
, где основным событием является пользователь, устанавливающий флажок Winforms. Другой - Observable.Interval(..)
, на который я подписываюсь, чтобы выполнить IO, и я бы хотел, чтобы эта наблюдаемая не выполняла IO, когда флажок не установлен.
Я мог бы сделать это так:
var gui = new GUI();
var booleans = Observable
.FromEvent<GUI.NewAllowHandler, bool>(
h => gui.NewAllow += h,
h => gui.NewAllow -= h)
Observable.Interval(TimeSpan.FromSeconds(10))
.CombineLatest(booleans, Tuple.Create)
.Where(t => t.Item2)
.Select(t => t.Item1)
.Subscribe(l => DoStuff(l));
но это накладные расходы на смешивание логических значений в и из потока. Лучше было бы сделать это, если бы я мог сгенерировать изменяющееся во времени значение из переменной booleans
, которая всегда имела значение последнего события. Тогда я мог бы сделать что-то вроде этого:
var gui = new GUI();
var booleanState = Observable // typeof(booleanState) == ???
.FromEvent<GUI.NewAllowHandler, bool>(
h => gui.NewAllow += h,
h => gui.NewAllow -= h)
.TimeValue() // hypothetical syntax
Observable.Interval(TimeSpan.FromSeconds(10))
.Where(_ => booleanState)
.Subscribe(l => DoStuff(l));
, что мне кажется гораздо ближе к постановке проблемы. Есть ли что-то подобное в Rx или что-то еще, что может облегчить решение таких проблем?