This is a significant distinction, but it's not the distinction that defines "cooperative" multitasking.
At least in the Apple world, cooperative multitasking means non-preemptive multitasking. Preemptive multitasking is about ejecting the current execution from a thread on a schedule, while cooperative multitasking is about ejecting the current execution from a thread at a point chosen by the current execution. Both deal with the behavior of single threads.
I dunno if this is the important takeaway on this axis, either. The only time that threads spend time doing nothing is when they're inside a blocking call of some kind, including stuff like synchronous locks.
Preemptive vs. cooperative affects performance more in the arena of thread-switching overheads vs. progress of each task assigned to a thread.
Swift concurrency uses cooperative kinds of behaviors to share a small pool of threads across an arbitrary number of tasks. That makes blocking (which is a very uncooperative behavior) a Bad Thing™ for Swift concurrency. But cooperation without any blocking is probably more efficient than preempting with or without blocking.
Preempting OTOH provides better progress on tasks overall, except when it doesn't.