我在某些類上實現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