Kotlin’s suspendable functions and coroutines made async programming look very easy.
To be more precise, it made sequential async code look like just sequential code. The async/await and for comprehensions also do the same but when compared to kotlin async code, it seems like kotlin code gives the feeling of encapsulating the async effect inside the method (to some extent). The caller from another suspendable function calls it like a normal function.
It makes executing the async code sequential by default and makes you opt in if you want to execute multiple async functions in parallel. Not always, but IMO, most of the times we are executing async code sequentially which is why I find kotlins approach very attractive for modern async programming.
Would be nice if scala adopts this feature.