@groostav Coroutines make async logic simpler to express. To get benefits over other approaches from coroutines, your code has to have some suspensions (waiting for network IO, etc). You can do all the other stuff with coroutines too by simply replacing threads with coroutines, but you will not get any saving neither in terms of code size, nor in performance. In particular, parallelising CPU-bound workflows of the type that Mike shows there falls into that category.