Verso l'asincrono...

di Andrea Zani, in .NET2,

Guardando tra le innumerevoli nuove classi del Framework 2.0 non si può non notare come esso stia spostando verso l'asincrono. La stessa classe principale per le webapplication, l'ormai nota classe Page, introduce per la sua elaborzione moltissimi eventi asincroni per l'elaborazione della stessa, e tra le novità della direttiva Page all'inizio delle nostre pagine ASP.NET possiamo aggiungere un nuovo attributo, Async:

<%@ Page language="c#" async="true" %>

Come giustamente si sospetterà, questo attributo permette l'elaborazione della pagina in modo asincrono. Nella documentazione nell'MSDN dedicato alla Beta1 del nuovo Framework è presente un ottimo esempio a riguardo:

void Page_Load(object sender, EventArgs e)
  {
    Label1.Text = "Page_Load: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();

    BeginEventHandler bh = new BeginEventHandler(this.BeginGetAsyncData);
    EndEventHandler eh = new EndEventHandler(this.EndGetAsyncData);
    AddOnPreRenderCompleteAsync(bh, eh);
    // Initialize the WebRequest.
    string address = "<a href="http://localhost/">http://localhost/</a>";
    myRequest = System.Net.WebRequest.Create(address);
    }
}

    IAsyncResult BeginGetAsyncData(Object src, EventArgs args, AsyncCallback cb, Object state)
    {
        Label2.Text = "BeginGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();
        return myRequest.BeginGetResponse(cb, state);
    }
    void EndGetAsyncData(IAsyncResult ar)
    {
        Label3.Text = "EndGetAsyncData: thread #" + System.Threading.Thread.CurrentThread.GetHashCode();
        System.Net.WebResponse myResponse = myRequest.EndGetResponse(ar);
        result.Text = new System.IO.StreamReader(myResponse.GetResponseStream()).ReadToEnd();
        myResponse.Close();
    }

Viene richiesta una pagina in modo asincrono nell'esempio riportato. Ora non mi è possibile effettuare delle prove prestazionali, ma sono veramente curioso di sapere i miglioramenti di performance che questa tecnica permette!

Come se non bastasse, anche l'accesso alle varie basi di dati è possibile ora in modo asincrono; si veda per esempio le varie funzioni della classe Command:

  • BeginExecuteNonQuery
  • BeginExecuteReader
  • BeginExecuteXmlReader
  • ...

W l'asincrono!

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese