That's always how it worked though. In the cooperative multitasking that people complain about (in early Windows and Mac for instance), "blocking I/O" called yield internally, and you only needed to call yield() manually in long running computations that didn't have any I/O.
What you're describing is bog standard cooperative multitasking.
What you're describing is bog standard cooperative multitasking.