> Was spinning up a bunch of OS threads not an acceptable solution for the majority of situations?
It's worth remembering that this is still a very acceptable thing to do in some cases. And spawning OS threads is sometimes easier to write and easier to read, and easier to reason about than async code.
Just because async is in the language, don't feel like you need to use it everywhere.