J'implémente l'interface IObservable<T>
sur certaines classes. J'ai utilisé Reflector pour comprendre comment cela se fait typiquement dans Rx. En ce qui concerne la façon dont une observable garde la trace de ses abonnés et les notifie par leur méthode OnNext
, je suis tombé sur un code similaire à ceci:Devrais-je utiliser la liste <IObserver> ou simplement l'action <T> pour garder une trace des abonnés d'un 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);
}
Comme tous les délégués sont multi-acteurs, pourrait pas être simplifiée:
Action<T> observers;
// subscribe observer:
public IDisposable Subscribe(IObserver<T> observer)
{
observers += observer.OnNext;
...
}
// trigger observers' OnNext:
...
observers(value);
Ou y at-il des avantages spécifiques à la première approche (performance, problèmes filetage/accès concurrentiel, & hellip;)?
de plus, vous aussi rencontrer des problèmes avec les doublons si vous avez utilisé l'application délégué multicast gardon. Si deux observateurs ayant exactement les mêmes méthodes OnNext ont été ajoutés, et qu'un a ensuite été supprimé, cela supprimerait le rappel pour les deux. – SoftMemes
Libéré: Non, ce n'est pas un problème. Seule la première instance d'un délégué donné est supprimée. – Gabe
Vous avez raison. Ce qui arrivera cependant, c'est que le «mauvais» délégué sera supprimé, ce qui modifiera l'ordre de notification des observateurs (qui peut ou non être pertinent). – SoftMemes