123456789101112131415161718192021222324252627282930313233 |
- using System;
- using System.Threading;
- namespace UniRx.Operators
- {
- public abstract class OperatorObserverBase<TSource, TResult> : IDisposable, IObserver<TSource>
- {
- protected internal volatile IObserver<TResult> observer;
- IDisposable cancel;
- public OperatorObserverBase(IObserver<TResult> observer, IDisposable cancel)
- {
- this.observer = observer;
- this.cancel = cancel;
- }
- public abstract void OnNext(TSource value);
- public abstract void OnError(Exception error);
- public abstract void OnCompleted();
- public void Dispose()
- {
- observer = UniRx.InternalUtil.EmptyObserver<TResult>.Instance;
- var target = System.Threading.Interlocked.Exchange(ref cancel, null);
- if (target != null)
- {
- target.Dispose();
- }
- }
- }
- }
|