Почему я не должен& #39;не реализовывать IObservable?

Прочитав msdn о Reactive Extensions и тому подобном, я нашел рекомендацию, в которой говорилось, что я не должен реализовывать IObservable, а использовать Observable.Create... К тому времени, когда я это прочитал, в моем проекте уже был класс ObservableImplementation<T>, который я использовал в качестве источника IObservable, везде, где я хотел преобразовать события в Observables.

Я прочитал 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(); } }
}
12
задан TDaver 7 May 2012 в 10:33
поделиться