private void Start() { var updateSignal = Observable.Merge(key.AsUnitObservable(), eventType.AsUnitObservable()); var disposable = new CompositeDisposable(); updateSignal .Subscribe(delegate { disposable.Clear(); if (Enum.GetNames(typeof(KeyCode)).Contains(key.Value)) { Observable.EveryUpdate() .Select(GetKeySelector <long>(key.Value, eventType.Value)) .Subscribe(isSatisfied => satisfactionProperty.Value = isSatisfied) .AddTo(disposable); } }); }