Since Co-Routines do not support pre-emption, the switch between co-routines occurs when the co-routine calls an API function. They don’t save enough state to allow a co-routine to be interrupted at another point and the flow of execution changed (to another co-routine). In effect, all the co-routines in a program fall within a single task, and that task can be pre-empted, so another task can run. This is what the Woken flag controls, should the “co-routine” task be woken by the interrupt.