Quelle est la différence pratique entre toutes ces extensions réactives Observable?

StackOverflow https://stackoverflow.com/questions/2389365

  •  24-09-2019
  •  | 
  •  

Question

Étant donné un BehaviorSubject, quelle est la différence pratique entre appeler toutes ces différentes fonctions là-dessus?

  • Première ()
  • Dernière ()
  • LatestValue ()
  • MostRecentValue ()
  • NextValue ()
  • Simple ()
  • Prenez (1)

En supposant que je comprends bien, ils devraient tous faire la même chose, étant donné la BehaviorSubject.

Si oui, quel appel est le plus approprié (par lequel je veux dire: qui mieux mon intention communique)? peut-être premier ou unique?

Sinon, quelles sont les différences pratiques?

Était-ce utile?

La solution

D'abord, dernier et unique bloquent; il est recommandé d'utiliser Take (1) à la place, vous obtenez un IObservable retour. Lorsque enchaînant les opérateurs de la requête, il est recommandé d'éviter d'abord, le dernier et unique parce que vous quittez la sécurité de la monade ... c'est-à-dire que vous avez le blocage des effets secondaires. Voir http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dangerous-yet-extremely-useful.aspx pour en savoir plus à ce sujet.

MostRecentValue et LatestValue ont été retirés de la dernière version de Rx, car ils bloquent aussi, donc le blocage que les opérateurs de gauche sont d'abord, dernier et unique (et les variantes de xxxOrDefault), selon les dernières notes de version.

mostRecent retourne la dernière valeur échantillonnée, aussi souvent que vous appelez (et il faut un initialValue pour garantir qu'il ne sera jamais attendre), soit « sans consommation », alors que dernier attendra jusqu'à ce qu'une valeur arrive revenir ensuite « avec consommation » - qui est, si vous appelez dernier encore, il ne reviendra pas la même valeur que le dernier appel, il attendra jusqu'à ce que la valeur suivante arrive, si jamais

.

Autres conseils

Merci @RichardHein pour la grande réponse.

Les méthodes d'extension de blocage devraient vraiment être déplacés dans leur propre espace de noms, de sorte que le développeur doit choisir spécifiquement pour les inclure pour un projet (ou plus précisément un fichier CS). Vous ajoutez une tonne de complexité avec Rx, et en utilisant accidentellement une méthode de blocage vous déléguant essentiellement revenir à IList / IEnumerable.

Je pense que c'est la plus grande erreur de l'équipe Rx fait, je pense que OIEau en incluant ceux-ci par défaut, ils ont raté la « fosse de succès » avec Rx. Résoudre ce problème et j'appelle Rx l'API de choix lors du déplacement au-delà de monothread + async en C # (à savoir pourquoi .NET est plus puissant que dire NodeJS).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top