Threads & Tasks in C# I Threads sono un’astrazione a basso livello rispetto ai Tasks. Un Task può essere considerata come una porzione di codice che deve essere eseguita separatamente rispetto al flusso del programma, mentre un Task è un processo che viene eseguito come attività all’interno del sistema operativo. In questo post vengono analizzate le principali differenze tra Tasks […]
Programmazione asincrona con async – await (parte 2) Dopo il post introduttivo sulla programmazione asincrona in .NET, analizziamo le parole chiave async e await, introdotte a partire da C# 5.0. Async e Await consentono di scrivere codice asincrono in modo semplice: il codice risulta molto simile a quello sincrono, con tutti i vantaggi che ne derivano in termini di gestione di thread. Nella programmazione […]
Programmazione Asincrona e deadlock Nel refactoring di applicazioni windows form (ebbene si, esistono ancora!) o comunque in quelle applicazioni con lunghi task di elaborazione, uno dei problemi di maggiore impatto per gli utenti è il freeze dell’interfaccia utente. A partire dal framework 4.5 (C# 5) sono disponibili le keyword async e await per la scrittura di codice asincrono. Una […]
Programmazione asincrona codice misto Sviluppando codice asincrono si tende spesso ad implementare buona parte delle funzioni sfruttando le potenzialità fornite dall’utilizzo di async ed await. Un pò come se rendere i comportamenti asincroni fosse in qualche modo “contagioso”. Se all’interno del codice vengono sviluppate fuzioni sincrone, lo sviluppo “misto” può generare problematiche nel flusso di esecuzione e nelle performance della […]
Programmazione Asincrona eccezioni multiple Gestire eccezioni all’interno di codice asincrono non sempre porta ai risultati attesi. Analizziamo il seguente codice asincrono public static Task<int> Foo() { return Task<int>.Factory.StartNew(() => { throw new Exception(“From Foo!”); }); } public static Task<int> Bar() { return Task<int>.Factory.StartNew(() => { throw new Exception(“From Bar!”); }); }