-
launchis used to fire and forget coroutine. It is like starting a new thread. If the code inside thelaunchterminates with exception, then it is treated like uncaught exception in a thread — usually printed to stderr in backend JVM applications and crashes Android applications.joinis used to wait for completion of the launched coroutine and it does not propagate its exception. However, a crashed child coroutine cancels its parent with the corresponding exception, too. -
asyncis used to start a coroutine that computes some result. The result is represented by an instance ofDeferredand you must useawaiton it. An uncaught exception inside theasynccode is stored inside the resultingDeferredand is not delivered anywhere else, it will get silently dropped unless processed. You MUST NOT forget about the coroutine you’ve started with async.