3 votes

Une fonction de bibliothèque doit-elle être suspendue ou avoir un retour différé ?

Supposons que j'écrive une bibliothèque qui renvoie une chaîne de caractères, ce qui est une tâche complexe et longue.

Je peux choisir entre offrir ceci

interface StringGenerator {
   suspend fun generateString(): String
}

o

interface StringGenerator {
   fun generateString(): Deferred<String>
}

L'une ou l'autre de ces options présente-t-elle des avantages ou des inconvénients et lesquels ? Laquelle devrais-je choisir ?

7voto

Marko Topolnik Points 77257

Les coroutines Kotlin sont conçues selon le principe de la "séquentiel par défaut" directive. Cela signifie que votre API doit toujours exposer suspend fun et l'utilisateur, si et quand il en a vraiment besoin, peut facilement les envelopper dans des async .

L'avantage de cela est analogue à l'avantage de froid les flux par rapport à chaud flux : une fonction suspendable n'est active que lorsque le contrôle est à l'intérieur. Lorsqu'elle revient, elle n'a pas laissé derrière elle une tâche s'exécutant en arrière-plan.

Chaque fois que vous renvoyez un Deferred l'utilisateur doit commencer à s'inquiéter de ce qui se passera s'il ne parvient pas à attendre le résultat. Certains chemins de code peuvent l'ignorer, le code appelant peut obtenir une exception, et alors son application a une fuite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X