YanCheng_Metrology/Assets/Plugins/UniRx/Scripts/Operators/OperatorObserverBase.cs

33 lines
909 B
C#

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();
}
}
}
}