Was ist der praktische Unterschied zwischen all diesen reaktiven beobachtbaren Erweiterungen?

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

  •  24-09-2019
  •  | 
  •  

Frage

Was ist der praktische Unterschied zwischen dem Aufruf all dieser unterschiedlichen Funktionen angesichts eines Verhaltens.

  • Zuerst()
  • Letzte()
  • LetztesValue ()
  • MostrecentValue ()
  • NextValue ()
  • Single()
  • Nimm 1)

Angenommen, ich verstehe es richtig, sollten sie alle angesichts des Verhaltens des gleichen tun.

Wenn ja, welcher Anruf dann am besten geeignet ist (womit ich meine: Was kommuniziert meine Absicht am besten)? Ersten oder Single vielleicht?

Wenn nicht, was sind dann die praktischen Unterschiede?

War es hilfreich?

Lösung

Erstens blockieren zuletzt und Single; Es wird empfohlen, stattdessen (1) (1) zu verwenden, sodass Sie einen IOBServable -Rücken erhalten. Wenn Sie Anfrageberätiger verkleiden, wird empfohlen, zuerst, zuletzt und ledig zu vermeiden, weil Sie die Sicherheit der Monade verlassen ... das heißt, Sie haben blockierende Nebenwirkungen. Sehen http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dangous-yet-extremely-useful.aspx Für mehr darüber.

MostRecentValue und Last -Value wurden aus der neuesten Version von RX entfernt, da sie ebenfalls blockieren.

Mostrecent gibt den letzten abgetasteten Wert so oft zurück, wie Sie es nennen (und es dauert ein InitialValue, um zu garantieren, dass er nie warten wird), dh "ohne Konsum", während das Neueste wartet, bis ein Wert eintrifft, dann gibt es "mit Verbrauch" zurück " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Das heißt, wenn Sie das Neueste erneut anrufen, wird es nicht den gleichen Wert wie der letzte Anruf zurückgeben, es wird warten, bis der nächste Wert eintrifft, falls nie.

Andere Tipps

Danke @richardhein für die großartige Antwort.

Die Blockierungsverlängerungsmethoden sollten wirklich in ihren eigenen Namespace verschoben werden, sodass der Entwickler sie speziell für ein Projekt (oder speziell für eine CS -Datei) einbeziehen muss. Sie fügen eine Menge Komplexität mit RX hinzu und indem Sie versehentlich eine Blockierungsmethode verwenden, übertragen Sie im Grunde genommen zurück zu ilist/iEnumerable.

Ich denke, dies ist der größte Fehler, den das RX -Team gemacht hat. Ich denke, dass sie diese standardmäßig mit RX die "Grube des Erfolgs" verpasst haben. Beheben Sie dies und ich würde RX die API der Wahl nennen, wenn ich in C# hinausgeht, wenn ich über Single-Threaded + -Ansynchronisation hinausging (dh warum .NET leistungsfähiger ist als nodejs).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top