I sometimes have the feeling that too much thought is put into dealing with multithreading issues. My impression is that async is actually much harder to deal with conceptually. Regardless whether you have a thread pool or whether it all runs on a single thread, like in JavaScript (or Swift Wasm?).
I find it quite easy to fit a few serial threads/queues into my brain and coordinate them. And rather hard to digest an arbitrary graph of concurrent tasks. nextTick()
Maybe it’s an abstraction a little like a GC “don’t think about them, they’ll run eventually, somehow, maybe”.
@helge I first came across it in PHP (well, in Hack), and thought “so you say this function waits until that function returns, then it continues, how is that asynchronous?”