Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Richiamare un metodo asincrono dal metodo Main in Visual Basic

Come sapete, l'utilizzo del pattern Async/Await impone alcune limitazioni architetturali quando lavorate con un'applicazione Console. Ci sono tanti motivi per lavorare con questo tipo di applicazioni, banalmente per creare demo o per realizzare tool dalla riga di comando quindi il punto non è questo.
Il problema è che nelle Console application potreste avere dei metodi asincroni da lanciare all'avvio, ma purtroppo il metodo Main non può essere marcato come Async, quindi non può contenere l'operatore Await per attendere il risultato di metodi asincroni.

Fortunatamente c'è un piccolo workaround. Considerate il seguente metodo asincrono, che scarica solamente il contenuto degli RSS di questo blog:
    Private Async Function GetBlog() As Task
        
Dim client As New WebClient
        
Dim content = Await client.DownloadStringTaskAsync("http://community.visual-basic.it/Alessandro/Rss.aspx")
        
'Proseguire qui l'analisi del risultato ottenuto....
    
End Function
Immaginate ora di volerlo invocare dal metodo Main di una Console app. Non potete utilizzare l'operatore Await, fortunatamente il tipo Task espone un metodo chiamato Wait che forza l'attesa del completamento dell'operazione asincrona prima di continuare il flusso applicativo. Ecco come usarlo:

    Sub Main()
        GetBlog.Wait()
    
End Sub

Ovviamente questo approccio può sfruttare i benefici di async/await solo nel primo metodo, ma nel caso aveste bisogno di farlo, questa è una soluzione.

Alessandro

Print | posted on lunedì 3 marzo 2014 00:54 | Filed Under [ .NET Framework Visual Basic ]

Powered by:
Powered By Subtext Powered By ASP.NET