阅读有关响应式扩展等的 msdn 时,我发现一个建议说我不应该实现 IObservable,而应该使用 Observable.Create...当我读到这篇文章时,我的项目已经有了一个ObservableImplementation<T>
类,我d 用作 IObservable 源,在任何我想将事件转换为 Observable 的地方。
我已经阅读了AbstractObservable<T>
System.Reactive 中的实现,我没有发现他们的代码和我的代码有任何重大区别。那么实现 IObservable 有什么问题呢?我可以向它添加我自己的属性,等等......
为了完整起见,这是我的实现,如果我做错了什么,请告诉我!
public sealed class ObservableImplementation<T> : IObservable<T>
{
class Subscription : IDisposable
{
private readonly Action _onDispose;
public Subscription(Action onDispose)
{
_onDispose = onDispose;
}
public void Dispose()
{
_onDispose();
}
}
public void Raise(T value)
{
_observers.ForEach(o => o.OnNext(value));
}
public void Completion()
{
_observers.ForEach(o => o.OnCompleted());
_observers.Clear();
}
private readonly List<IObserver<T>> _observers = new List<IObserver<T>>();
public IDisposable Subscribe(IObserver<T> observer)
{
var subscription = new Subscription(() => _observers.Remove(observer));
_observers.Add(observer);
return subscription;
}
public bool AnyObserverPresent { get { return _observers.Any(); } }
}