Development ASP.Net Tutorial

<%@ Page Async="true" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 
    Inherits="Default" Trace="true" %>



    Async pages


    
        
        
            <% = rssData %>
        
        

    


File: Default.aspx.cs
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
using System.Xml;
using System.Net;
using System.IO;
using System.Text;
using System.Xml.XPath;
public partial class Default : System.Web.UI.Page
{
    const string RSSFEED = "http://weblogs.asp.net/despos/rss.aspx";
    private WebRequest req;
    public string rssData;
    protected void Page_Load(object sender, EventArgs e)
    {
        AddOnPreRenderCompleteAsync(
            new BeginEventHandler(BeginTask),
            new EndEventHandler(EndTask));
    }
    IAsyncResult BeginTask(object sender, EventArgs e, AsyncCallback cb, object state)
    {
        Trace.Warn("Begin async: Thread=" + 
                    Thread.CurrentThread.ManagedThreadId.ToString());
        req = WebRequest.Create(RSSFEED);
        return req.BeginGetResponse(cb, state);
    }
    void EndTask(IAsyncResult ar)
    {
        string text;
        using (WebResponse response = req.EndGetResponse(ar))
        {
            StreamReader reader;
            using (reader = new StreamReader(response.GetResponseStream()))
            {
                text = reader.ReadToEnd();
            }
            rssData = ProcessFeed(text);
        }
        Trace.Warn("End async: Thread=" + 
                    Thread.CurrentThread.ManagedThreadId.ToString());
        
    }
    string ProcessFeed(string feed)
    {
        StringBuilder sb = new StringBuilder();
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(feed);
        XPathNavigator nav = doc.CreateNavigator();
        XPathNodeIterator iterator;
        iterator = nav.Select("/rss/channel/title");
        iterator.MoveNext();
        sb.AppendFormat("

{0}

", iterator.Current.Value);
        iterator = nav.Select("/rss/channel/description");
        iterator.MoveNext();
        sb.AppendFormat("{0}", iterator.Current.Value);
        XmlNodeList items = doc.SelectNodes("/rss/channel/item");
        sb.Append("
    ");
            foreach (XmlNode n in items)
            {
                XmlNode title = n.SelectSingleNode("title");
                XmlNode link = n.SelectSingleNode("link");
                XmlNode date = n.SelectSingleNode("pubDate");
                sb.AppendFormat("
  • {1} on {2}
  • ", link.InnerText, title.InnerText, date.InnerText);
            }
            sb.Append("
");
        return sb.ToString();
    }
}