Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Async CTP refresh

Debbo dirlo, sono un appassionato dell’Async CTP ed una delle cose che mi piace di più è che appena installato hai subito la possibilità di vedere degli esempi di codice, tra cui il mitico 101 c# async samples. (lo trovate tra i samples, uno degli aspetti più interessanti è che di esempi ce ne sono veramente tanti)

La cosa interessante di questo esempio è che mostra come una certa operazione asincrona può essere fatta con l’aiuto di async e come invece la faremmo in C# 4.0, questo fa capire veramente bene come il codice sia veramente molto, ma molto più semplice. Per esempio quando facciamo una richiesta con un WebRequest è buona norma farla asincrona.

   1: public void AsyncIntroSingleBefore()
   2: {
   3:     var client = new WebClient();
   4:  
   5:     client.DownloadStringCompleted += AsyncIntroSingleBefore_DownloadStringCompleted;
   6:     client.DownloadStringAsync(new Uri("http://www.weather.gov"));
   7: }
   8:  
   9: void AsyncIntroSingleBefore_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
  10: {
  11:     WriteLinePageTitle(e.Result);
  12: }

Ok il codice non è molto, basta gestire un evento e usare il DownloadStringAsync, ed il gioco è fatto… ma con l’Async CTP è molto più semplice.

   1: public async void AsyncIntroSingle()
   2: {
   3:     WriteLinePageTitle(await new WebClient().DownloadStringTaskAsync(new Uri("http://www.weather.gov")));
   4: }

Non si può non apprezzare il codice molto più coinciso. Ma la vera potenza è quando dovete fare piu operazioni asincrone, ad esempio caricare tre pagine in sequenza

   1: public async void AsyncIntroSerial()
   2: {
   3:     var client = new WebClient();
   4:  
   5:     WriteLinePageTitle(await client.DownloadStringTaskAsync(new Uri("http://www.weather.gov")));
   6:     WriteLinePageTitle(await client.DownloadStringTaskAsync(new Uri("http://www.weather.gov/climate/")));
   7:     WriteLinePageTitle(await client.DownloadStringTaskAsync(new Uri("http://www.weather.gov/rss/")));
   8: }

o ancora meglio, in parallelo.

   1: public async void AsyncIntroParallel()
   2: {
   3:     Task<string> page1 = new WebClient().DownloadStringTaskAsync(new Uri("http://www.weather.gov"));
   4:     Task<string> page2 = new WebClient().DownloadStringTaskAsync(new Uri("http://www.weather.gov/climate/"));
   5:     Task<string> page3 = new WebClient().DownloadStringTaskAsync(new Uri("http://www.weather.gov/rss/"));
   6:  
   7:     WriteLinePageTitle(await page1);
   8:     WriteLinePageTitle(await page2);
   9:     WriteLinePageTitle(await page3);
  10: }

Vale la pena decisamente di studiarci sopra Smile

alk.

Tags:

DotNetKicks Image

Print | posted on martedì 10 maggio 2011 22:13 | Filed Under [ .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET