Having recently learned Elixir, I really wonder why the C# people decided to add async/await rather than coroutines (like Erlang processes or Goroutines).
It feels to me like async/await is the malloc of concurrent programming, and coroutines are the garbage collection of concurrent programming. You hand in a little performance in exchange for a lot less complexity. Go has shown you can also do this without only-immutable data.
Am I missing something?