|
|
|
@ -111,25 +111,38 @@ namespace Avalonia.Reactive |
|
|
|
|
|
|
|
protected abstract void Initialize(); |
|
|
|
protected abstract void Deinitialize(); |
|
|
|
|
|
|
|
|
|
|
|
protected void PublishNext(T value) |
|
|
|
{ |
|
|
|
if (Volatile.Read(ref _observers) != null) |
|
|
|
{ |
|
|
|
IObserver<T>[] observers; |
|
|
|
|
|
|
|
IObserver<T>[] observers = null; |
|
|
|
IObserver<T> singleObserver = null; |
|
|
|
lock (this) |
|
|
|
{ |
|
|
|
if (_observers == null) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
observers = _observers.ToArray(); |
|
|
|
if (_observers.Count == 1) |
|
|
|
{ |
|
|
|
singleObserver = _observers[0]; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
observers = _observers.ToArray(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var observer in observers) |
|
|
|
if (singleObserver != null) |
|
|
|
{ |
|
|
|
observer.OnNext(value); |
|
|
|
singleObserver.OnNext(value); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
foreach (var observer in observers) |
|
|
|
{ |
|
|
|
observer.OnNext(value); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|