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!
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Un po' di benchmark tra Linq, Entity Framework e Nhibernate, il 12 ottobre 2008 alle 14:46
- UrlRewriting con trabocchetti vari, l'11 dicembre 2007 alle 21:00
- Windows Forms - DataGridView e validazione, il 23 settembre 2007 alle 20:08
- ControlParameter e masterpage... bug?, il 23 dicembre 2006 alle 15:58
- Se Visual Studio 2005 non accetta più la tastiera, il 16 dicembre 2006 alle 20:45
- Service Pack 1 di Visual Studio 2005, il 16 dicembre 2006 alle 20:35