Experience has shown me this. If you only have one suspend function running at that particular time, despite having a multithreaded dispather your coroutine will run in one thread. This is not the case if at the particular moment, there are other concurrent coroutines running. Thus when it suspends, it tends to resume on a free thread.
A free thread in this context is thread that either hasn't run any coroutine yet, or has suspended and is waiting for a coroutine to resume