Saturday 27 December 2014

Part 1: Async requests in ASP.NET MVC 4 when working with Session [Understanding the problem]

This is a multi-part post dedicated to Async requests in ASP.NET MVC 4 when working with Session. Be sure to follow this series starting from the first post to gain a clear understanding.


Our Objective

A part of the application that we're developing at Panviva required us to download an xml file generated by our legacy system via a web service call to the existing application server. While the task at hand was was easy to accomplish, I noticed that the time it took to generate the file could take a few minutes. Additionally it blocked the user from making any other requests while it processed. I know, YIKES!!

Of course its not acceptable cause while that request responded, the user in that session could pretty much do nothing else.

How web servers respond

Its important to understand how the web server responds to requests.

On the web server, the .NET Framework maintains a pool of threads that are used to service ASP.NET requests. When a request arrives, a thread from the pool is dispatched to process that request. If the request is processed synchronously, the thread that processes the request is busy while the request is being processed, and that thread cannot service another request.

This might not be a problem, because the thread pool can be made large enough to accommodate many busy threads. However, the number of threads in the thread pool is limited (the default maximum for .NET 4.5 is 5,000). In large applications with high concurrency of  long-running requests, all available threads might be busy. This condition is known as thread starvation. When this condition is reached, the web server queues requests. [Info Src Link]


The problem

So looks like it was Thread Starvation that was causing the issue ... OR WAS IT?? *Insert Dramatic Pause*

Find out more in my next post here! (Spoiler Alert: Turns out it wasn't Thread Starvation)