我在某些类上实现IObservable<T>
接口。我使用Reflector来弄清楚这通常是在Rx中完成的。关于如何可观察到的保持其用户的轨迹,并通过他们的OnNext
方法通知他们,我偶然发现了类似下面的代码:我应该使用列表<IObserver>还是仅仅使用Action <T>来跟踪IObservable的订阅者?
private List<Observer<T>> observers;
// subscribe a new observer:
public IDisposable Subscribe(IObserver<T> observer)
{
observers.Add(observer);
...
}
// trigger all observers' OnNext method:
...
foreach (IObserver<T> observer in observers)
{
observer.OnNext(value);
}
由于所有代表都是多投,不能这样被简化为:
Action<T> observers;
// subscribe observer:
public IDisposable Subscribe(IObserver<T> observer)
{
observers += observer.OnNext;
...
}
// trigger observers' OnNext:
...
observers(value);
还是有特定的优势,以第一种方法(性能,线程/并发问题,&hellip;)?
此外,您还可以运行与重复的问题,如果你使用的多播委托程序蟑螂。如果添加了两个具有完全相同的OnNext方法的观察者,然后删除了一个观察者,则会删除它们的回调。 – SoftMemes 2010-10-23 20:17:01
释放:不,这不是问题。只有给定委托的第一个实例被删除。 – Gabe 2010-10-23 21:25:21
你说得对。然而,会发生的是,“错误的”代表将被删除,这将改变观察者被通知的命令(可能相关也可能不相关)。 – SoftMemes 2010-10-23 21:59:58