Conceptually, coroutines represent sequential (non-concurrent) execution of a suspendable code. This is out-of-the-box sequential behavior is designed to ensure that naive users are not tripped by all the concurrency gotchas (like shared mutable state, etc)