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?
Réponses
Trop de publicités?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 deDeferred
et vous devez utiliserawait
sur il. Une exception non interceptée à l'intérieur de l'async
code est stocké à l'intérieur de l'résultantDeferred
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.
Je trouve ce guide https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md utile. Je vais citer les parties essentielles