Indeed, it's a paradigmatic shift, though as C# has given us perhaps the nicest async language features, I feel we should be further along than we are.
In the time that async/await has existed in C# in the JS world we've gone from callbacks to promises to (finally) async/await.
Of course, in the browser there's much higher incentive to get to grips with async - we can't just throw more CPUs at a problem so async is crucial to making most UIs usable at all.
Many high-traffic Umbraco sites are sat on massively overpowered infrastructure just so there's a high enough thread count to wait for TCP calls that should be async.
Hopefully Umbraco's sustainability push will help us make more progress on this.