internal StreamSubscriptionHandle <T> AddObserver <T>(StreamImpl <T> stream, IAsyncObserver <T> observer, IStreamFilterPredicateWrapper filter) { if (null == stream) { throw new ArgumentNullException("stream"); } if (null == observer) { throw new ArgumentNullException("observer"); } try { if (logger.IsVerbose) { logger.Verbose("{0} AddObserver for stream {1}", providerRuntime.ExecutingEntityIdentity(), stream); } // Note: The caller [StreamConsumer] already handles locking for Add/Remove operations, so we don't need to repeat here. IStreamObservers obs = allStreamObservers.GetOrAdd(stream.StreamId, new ObserversCollection <T>()); var wrapper = new ObserverWrapper <T>(observer, stream, filter); ((ObserversCollection <T>)obs).AddObserver(wrapper); return(wrapper); } catch (Exception exc) { logger.Error((int)ErrorCode.StreamProvider_AddObserverException, String.Format("{0} StreamConsumerExtension.AddObserver({1}) caugth exception.", providerRuntime.ExecutingEntityIdentity(), stream), exc); throw; } }
public ImageReference(string uri, RefCountImageCache parent) { Uri = uri; _parent = parent; _subject = new ReplaySubject <Unit>(1); _observerWrapper = new ObserverWrapper(_subject); _subscription = new SingleAssignmentDisposable(); InitializeImage(); }
public NSObject AddObserver(NSString key, Action <ObserverActionArgs> action, NSObject control = null) { if (notifications == null) { notifications = new List <NSObject> (); } if (control == null) { control = Control; } var wrap = new ObserverWrapper { Action = new WeakReference(action), Widget = new WeakReference(this.Widget) }; var observer = NSNotificationCenter.DefaultCenter.AddObserver(key, wrap.Run, control); notifications.Add(observer); return(observer); }
public IDisposable Subscribe(IObserver <TSource> observer) { ObserverWrapper wrapper = new ObserverWrapper(observer); return(source.LinkTo(wrapper)); }
internal void RemoveObserver(ObserverWrapper <T> observer) { ObserverWrapper <T> ignore; localObservers.TryRemove(observer.ObserverGuid, out ignore); }
internal void AddObserver(ObserverWrapper <T> observer) { localObservers.TryAdd(observer.ObserverGuid, observer); }