Throttle
Methode überspringt Werte aus einer beobachtbaren Sequenz, wenn andere zu schnell folgen. Aber ich brauche eine Methode, um sie zu verzögern. Das heißt, ich muss eine minimale Verzögerung zwischen den Elementen festlegen, ohne eine zu überspringen.Throttle Rx.Observable ohne Überspringen von Werten
Praktisches Beispiel: Es gibt einen Webservice, der Anfragen nicht schneller als einmal pro Sekunde annehmen kann; Es gibt einen Benutzer, der Anfragen einzeln oder in Stapeln hinzufügen kann. Ohne Rx erstelle ich eine Liste und einen Timer. Wenn Benutzer Anfragen hinzufügen, füge ich sie zur Liste hinzu. Im Timer-Event überprüfe ich, ob die Liste leer ist. Ist dies nicht der Fall, sende ich eine Anfrage und entferne den entsprechenden Artikel. Mit Schlössern und all dem Zeug. Jetzt, mit Rx, kann ich Subject
erstellen, Elemente hinzufügen, wenn Benutzer Anforderungen hinzufügt. Aber ich brauche einen Weg, um sicherzustellen, dass der Web-Service nicht überflutet wird, indem ich Verzögerungen anwende.
Ich bin neu in Rx, also vielleicht fehlt mir etwas offensichtlich.
Ist 'Thread.Sleep' nicht schlecht? Ich dachte immer, einen Thread für Dinge auszusetzen, die im Wesentlichen "Timer" sind, ist eine Verschwendung von Ressourcen. –
@VarvaraKalinina - Es passiert auf seinem eigenen Thread und es ist nichts anderes festgefahren. In diesem Fall ist es in Ordnung. – Enigmativity
Ich habe nicht gesagt, dass es darum geht, etwas zu blockieren oder zu blockieren. Es ging um Ressourcenverschwendung. Sie machen einen Thread gewaltsam fast die ganze Zeit nichts. Es könnte andere Dinge tun, wenn es nicht blockiert wurde –