This article discusses one of most unused but very useful feature of ASP.NET that is Asynchronous programming
Have you ever tried using Async pages in asp.net? Did you ever explore it in
respect of ASP.NET?
If No. This is the article for you. In this, I will be discussing, what is Async
programming? what are the benefits? Async in respect of ASP.NET and its uses
and lots more.
In a literal meaning, Asynchronous operation means that a
process operates independently of other processes. If there are multiple
operations, All that can be handled different processes/thread without waiting
to complete the other ones. So here in coming sections, we will be discussing,
how Asynchronous programming comes into the picture in ASP.NET.
Normally the kind of websites that we make are not
scalable enough that could have been. These websites are very limited and
confined. ASP.NET provides us a way to develop our websites more scalable.
Now lets discuss Async programming in respect of ASP.NET. We need to understand how ASP.NET processes the request. When ASP.NET
receives a request from a Client, a thread is assigned to request from
Thread pool that takes care all the request processing for the request. In normal
cases, the thread is kept engaged till the request completes like this
instantiates the page, runs the event handling code and returns the rendered
HTML. If this request
requires some long running process or wait for some I/O process then it takes.
In the mean time if another request comes, the other free thread is assigned to
the request. But thread pool has a limited number of threads and if requests
continues pouring when all the thread were exhasted.ASP.NET is forced to deny
further requests and User will start getting
Server unavailable errors. Which you seriously does not want. Let's have a
pictorial view.

Fig: How Asynchronous page works
So in this article I am going to discuss, one of the most unused features of
ASP.NET but that will be really helpful for developing highly scalable and
available applications.
As we already discussed the need and
benefits of Async programming in ASP.NET. Lets discuss how ASP.NET leverages
Async programming. There is a series of steps/method gets executed ASP.NET loads
a page or post back occurs. Every ASP.NET process goes through HTTP pipeline and
the finally served by an Handler. A normal handler implements IHTTPHandler. Even
if have ever implemented the Handler you must be knowing it. But in case of
Async pages a normal HTTPHandler cannot serve the purpose. ASP.NET provides
another type of Handler that serves it, it implements IAsyncHTTPHadler. Lets
have a comparative look on Synchronous vs Asynchronous page processing.
Fig: Synchronous vs Asynchronous page processing
So now lets see a example: How to implement Asunchrponous page with ASP.NET.
I have created a sample page and would be showing step by step.
- Create a page and set Async="true" at page directive of aspx page as
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Async.aspx.cs"
Inherits="Async" Async="true" %>
- Now at code behind, we need to two methods say BeginTask and EndTask.
BeginTask takes some parameters and returns IAsuncresult ad start the task that
takes long. and EndTask will be called when the task gets completed and is
handled by another thread. The BeginTask woul be like
private IAsyncResult BeginTask(object sender, EventArgs e, AsyncCallback cb, object state)
{
//Write you code here
}
And your EndTask method would be like
private void EndTask(IAsyncResult ar)
{
//Write you code here
}
- We also need to tell the Page these BeginTask and EndTask methods. So that it will be called
appropriately. It will done on Page_Load as
protected void Page_Load(object sender, EventArgs e)
{
Page.AddOnPreRenderCompleteAsync(BeginTask, EndTask);
}
- You need to write your code at Page_PreRenderComplete
- We have to override dispose method, that should dispose any connection that we
open.
public override void Dispose()
{
//Write you disposal code here
}
I have attached one sample code for example in attachment. That gets the data
from database and bind it to the GridView. Assume that data is very large and your database
is at some remote machine then it may take long to load. So in that senario, it will be very helpful.
You can change the connection string and query to run the sample.
We have discussed a lot about Async pages. But is it advisable to use this in every
application. Absolutely not.
Because to change the thread between the operation, requires context switching,
saving temporary data and lots more. This is itself not very simple operation. So
one need to intelligently select this option.
Actually when we have pages that involves some Non ASP.NET thread like getting
result from some Web services, printing several pages, reading a file from remote
places. These type of Applications are the best candidates of Async programming.
Because say, If you have a page that requires to access a file from remote
location. So while accessing the file system from the remote location, the
ASP.NET thread gives the control to another thread for accessing the file. And
ASP.NET thread does not do anything till it receives the result from
continuation thread. And if it takes long your ASP.NET site provide less
throughput. So for better throughput, you can engage the thread to serve another
request.
Asynchrounos programming in ASP.NET
, one of most unused programming in ASP.NET. But this technology can be very useful
in several scenarios as we discussed above. Please share your feedback that will be very helpful in my upcoming writings.