Showing posts with label Asynchronous Programming. Show all posts
Showing posts with label Asynchronous Programming. Show all posts

Thursday, September 24, 2009

Asynchronous programming using IAsyncResult in ASP.NET

Here is the sample code for achieving asynchronous calls in ASP.NET using IAsyncResult


Asynchronous Provider:


public delegate List<Test> AsyncMethodCaller();
    public class AsyncProvider
    {
       
        public List<Test> GetTests()
        {
            System.Threading.Thread.Sleep(2000);
            return TestServices.provider.GetAllTests();
        }

    }



Using BeginInvoke and EndInvoke along with IAsyncResult in .aspx page:


public partial class TestAsync : System.Web.UI.Page
    {
        IAsyncResult result = default(IAsyncResult);
        AsyncProvider _provider = new AsyncProvider();
        AsyncMethodCaller caller = default(AsyncMethodCaller);
        List<Test> res = default(List<Test>);


        protected void Page_Load(object sender, EventArgs e)
        {
            txtFirstLoad.Text = "loaded first";           
        }
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            caller = new AsyncMethodCaller(_provider.GetTests);
        }
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            result = caller.BeginInvoke(null, null);
        }
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            res = caller.EndInvoke(result);
        }
        protected override void Render(HtmlTextWriter writer)
        {
            base.Render(writer);  
          
            grid.DataSource = res;
            grid.DataBind();
            grid.RenderControl(writer); 
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
            return;
        }

    }