Internet Information Server (IIS) has limits on the number of requests and I/O threads it can use. Blocking any of these threads means IIS is forced to wait until the thread is released before another request can be processed. When there are no threads available to process requests (because of blocking or high-server load), requests start to queue up, and over time, that queue can grow until it reaches its maximum size, at which point the dreaded 503 Service Unavailable message will be displayed to your site's visitors. This is not a good thing.
Historically, developers may have overlooked the benefits of using an asynchronous design when it came to web application design. This oversight may have been due to mindset, or have been limited by available technology. In any case, the rise of Node.js and similar asynchronous-based technologies demonstrates that this mentality is quickly changing. Most developers want a responsive, scalable web application...