As others have pointed out, async allows the request thread to return to the thread pool when performing an asynchronous operation. When using synchronous handlers, your server will have threads blocked during I / O, essentially doing nothing important, but also cannot be used for other requests while they are blocked. async just frees these threads so they are useful all the time.
So, the first thing to note is the question “ async or thread pool”. When you use async , you allow ASP.NET to make the most of the existing thread pool. async accepts existing (parallel) concurrency in ASP.NET and adds (asynchronous) concurrency to achieve greater scalability.
But the question remains "why"? The reasons are twofold: async can scale further (just) the thread pool, and async also more sensitive. As mentioned in the comments to other answers, threads are quite heavy objects that lose unnecessary pleasure; the memory for asynchronous operations is much less than that used by the thread. The second reason is also important: when a sudden surge in requests arrives, the thread pool (by itself) can only expand at a limited rate; async allows a thread pool to process request packets much more efficiently.
Stephen cleary
source share