babsevensix

Il blog di Alberto
posts - 94, comments - 81, trackbacks - 11

Aync e Try–Catch–Final

In c# 4.0 è bellissimo usare le nuove keywords quali async e await… solo che però nascondono qualche insidia ad esempio:

async void LoadOperazioni()
{
           this.IsBusy = true;
           var q = ViewModelLocator.DomainService.GetLogQuery();
           try
          
{
               var lstOperazioni = await ViewModelLocator.DomainService.LoadAsync(q, LoadBehavior.RefreshCurrent);

…operazioni varie 

                          }
           catch (System.Exception e)
           {
                              
           }
           finally
           
{
                  this.IsBusy = false;

            }

       }

Questo codice vorrebbe mettere la proprietà IsBusy = false alla fine dell’operazione sia che sia andata bene sia che sia andata male. Ebbene, non funzionerà, infatti all’istruzione await uscirà dalla clausola try/catch/finally ed eseguirà immediatamente l’istruzione IsBusy=false. Questo perchè comunque sia il compilatore interpreterà l’await come la costruzione di un thread separato del quale si rimarrà in attesa dell’evento di completamento del thread stesso.

Occhio quindi quando utilizzate async e await, che per quanto siano belle come nuove keywords possono nascondere queste e altre insidie

Print | posted on giovedì 28 giugno 2012 19:14 |

Feedback

Gravatar

# re: Aync e Try–Catch–Final

c# 5.0
29/06/2012 13:07 | andrea
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET