我正在实现IObservable<T>某些类的接口.我使用Reflector来弄清楚这是如何在Rx中完成的.关于观察者如何跟踪其订阅者并通过他们的OnNext方法通知他们,我偶然发现了与此类似的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
由于所有代表都是多播的,因此不能简化为:
Action<T> observers;
// subscribe observer:
public IDisposable Subscribe(IObserver<T> observer)
{
observers += observer.OnNext;
...
}
// trigger observers' OnNext:
...
observers(value);
Run Code Online (Sandbox Code Playgroud)
或者第一种方法(性能,线程/并发问题......)有特定的优势吗?