// Needed for NET40 #if !NET_4_6 using System; using LinqInternal.Collections.ThreadSafe; using LinqInternal.Threading; using LinqInternal.Threading.Needles; namespace LinqInternal.Collections { [Serializable] internal sealed class ProxyObservable : IObservable, IObserver, IProxyObservable { private readonly SafeSet>> _observers; public ProxyObservable() { _observers = new SafeSet>>(); } public void OnCompleted() { foreach (var item in _observers) { item.Value.OnCompleted(); } } public void OnError(Exception error) { foreach (var item in _observers) { item.Value.OnError(error); } } public void OnNext(T value) { foreach (var item in _observers) { item.Value.OnNext(value); } } public IDisposable Subscribe(IObserver observer) { var needle = new Needle>(observer); _observers.AddNew(needle); return Disposable.Create(() => _observers.Remove(needle)); } } } #endif