|
|
@@ -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);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|