the primary benefit would be that it is not bound to context.
coroutines only work in the context of a coroutine scope, which cannot be passed around so easily and when passed around, requires those targets to also be coroutine scopes
in essence, it breaks the execute-around pattern, which, especially in kotlin, is very often used (and for good reason)
usually, to fix incompatibility, we simply duplicate a portion of our code and effort to work with and without coroutine scopes