using System; namespace UniRx.Operators { internal class SynchronizedObserver : IObserver { readonly IObserver observer; readonly object gate; public SynchronizedObserver(IObserver observer, object gate) { this.observer = observer; this.gate = gate; } public void OnNext(T value) { lock (gate) { observer.OnNext(value); } } public void OnError(Exception error) { lock (gate) { observer.OnError(error); } } public void OnCompleted() { lock (gate) { observer.OnCompleted(); } } } }