The C# approach is the same async use case that Java has given up on. It’s a more complicated programming model, but it does increase concurrency allowing those C# programs to handle a larger load.
But the tradeoff is still the same. Those C# programs are much slower than they could be, and thanks to EntityFramework presses against memory limitations rapidly as the system scales up. (A consequence of the serial nature of processing.)
It’s not unique to C#, mind you. That’s the same reason Java Spring apps require so much memory.
In comparison, a pipelined approach can reliably operate at high traffic loads with only ~512MB of memory and faster response times. (My customers see a stable 200-300mb runtime. Much better than the PHP/Wordpress and C# systems they replaced.)