public IObservable <Change <TObject, TKey> > Watch(TKey key) { return(Observable.Create <Change <TObject, TKey> > ( observer => { lock (_locker) { var initial = _readerWriter.Lookup(key); if (initial.HasValue) { observer.OnNext(new Change <TObject, TKey>(ChangeReason.Add, key, initial.Value)); } return _changes.Finally(observer.OnCompleted).Subscribe(changes => { foreach (var change in changes) { var match = EqualityComparer <TKey> .Default.Equals(change.Key, key); if (match) { observer.OnNext(change); } } }); } })); }
public IObservable <Change <TObject, TKey> > Watch(TKey key) { return(Observable.Create <Change <TObject, TKey> > ( observer => { lock (_locker) { var initial = _readerWriter.Lookup(key); if (initial.HasValue) { observer.OnNext(new Change <TObject, TKey>(ChangeReason.Add, key, initial.Value)); } return _changes.Finally(observer.OnCompleted).Subscribe(changes => { var matches = changes.Where(update => update.Key.Equals(key)); foreach (var match in matches) { observer.OnNext(match); } }); } })); }