Some really good observations in here about why libdispatch suffered from scalability issues (in that it created to many threads) and the dichotomy of having to sprinkle async everywhere even if it didn’t make sense because it needed to be used from an async function elsewhere.
Related; the difference between “red” and “blue” functions is worth a read:
https://journal.stuffwithstuff.com/2015/02/01/what-color-is-...