web-dev-qa-db-fra.com

Différence entre doAfterTerminate et doFinally

Quelqu'un sait-il quelle est la différence entre les opérateurs "doAfterTerminate" et "doFinally" dans RxJava 2?

16
Andrey Turkovsky

La différence est que doFinally exécute les Action fournis si l'aval annule/supprime la séquence en plus des chemins de terminaison réguliers onError ou onComplete. Cela permet de nettoyer et de libérer des ressources par les trois moyens. L'opérateur garantit également que l'action est exécutée exactement une fois par abonnement, même si onError ou onComplete signale la course avec une annulation.

En revanche, doAfterTerminate ne couvre que onError et onComplete.

Vous pouvez émuler doFinally avec doAfterTerminate + doOnCancel, cependant, étant divisé une opération, les paramètres d'action peuvent être exécutés à la fois et provoquer des problèmes avec la logique de nettoyage non idempotent.

30
akarnokd