223 votes

Quelle est la différence entre launch / join et async / wait dans les coroutines Kotlin

Dans la bibliothèque kotlinx.coroutines , vous pouvez commencer une nouvelle coroutine en utilisant launch (avec join ) ou async (avec await ). Quelle est la différence entre eux?

303voto

Roman Elizarov Points 8871
  • launch est utilisé pour le feu et oublier coroutine. C'est comme commencer un nouveau thread. Si le code à l'intérieur de l' launch met fin à l'exception, alors il est considéré comme uncaught exception dans un thread -- généralement imprimé sur stderr dans le backend de la JVM des applications et des plantages d'applications Android. join est utilisé pour attendre l'achèvement de l'lancé coroutine et il ne se propage pas son exception. Cependant, l'écrasement d'un enfant coroutine annule son parent à l'exception correspondante, trop.

  • async est utilisé pour démarrer une coroutine qui calcule un résultat. Le résultat est représenté par une instance de Deferred et vous devez utiliser await sur il. Une exception non interceptée à l'intérieur de l' async code est stocké à l'intérieur de l'résultant Deferred et n'est pas envoyé n'importe où ailleurs, il sera ignoré, à moins transformés. Vous ne DEVEZ PAS oublier la coroutine vous avez commencé avec async.

98voto

onmyway133 Points 2196

Je trouve ce guide https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md utile. Je vais citer les parties essentielles

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