Yes, "run" methods are a feature of round-robin multitasking. Tasks can only be shared in real time, if they are called in real time. Delays defeat real time operation by slowing it down. In order for it to work, the loop() function must complete in a few milliseconds at most. If that doesn't happen, tasks are stalled.