La programació asíncrona és una tècnica que permet executar operacions de manera no bloquejant, millorant així la resposta i l'eficiència de les aplicacions. En C#, la programació asíncrona es gestiona principalment mitjançant les paraules clau async
i await
.
Conceptes Clau
async
i await
async
i await
async
: Aquesta paraula clau s'utilitza per marcar un mètode com a asíncron. Un mètodeasync
pot contenir una o més operacions asíncrones.await
: Aquesta paraula clau s'utilitza per esperar la finalització d'una operació asíncrona. Quan s'utilitzaawait
, el control es retorna al mètode que va cridar el mètode asíncron fins que l'operació asíncrona es completa.
Task
i Task<T>
Task
i Task<T>
Task
: Representa una operació asíncrona que no retorna un valor.Task<T>
: Representa una operació asíncrona que retorna un valor de tipusT
.
Exemples Pràctics
Exemple 1: Mètode Asíncron Simple
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { Console.WriteLine("Iniciant operació..."); await OperacioAsincrona(); Console.WriteLine("Operació completada."); } static async Task OperacioAsincrona() { await Task.Delay(2000); // Simula una operació que triga 2 segons Console.WriteLine("Operació asíncrona en procés..."); } }
Explicació:
Main
és el punt d'entrada del programa i està marcat comasync
perquè crida aOperacioAsincrona
ambawait
.OperacioAsincrona
és un mètode asíncron que simula una operació que triga 2 segons utilitzantTask.Delay
.
Exemple 2: Mètode Asíncron amb Retorn de Valor
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { Console.WriteLine("Iniciant càlcul..."); int resultat = await CalculAsincron(); Console.WriteLine($"Resultat del càlcul: {resultat}"); } static async Task<int> CalculAsincron() { await Task.Delay(2000); // Simula una operació que triga 2 segons return 42; // Retorna un valor després de la simulació } }
Explicació:
CalculAsincron
és un mètode asíncron que retorna unTask<int>
.- Després de la simulació de 2 segons, retorna el valor
42
.
Exercicis Pràctics
Exercici 1: Operació Asíncrona amb Retard
Descripció: Crea un mètode asíncron que simuli una operació de descàrrega de fitxers que triga 3 segons. Mostra un missatge abans i després de la descàrrega.
Solució:
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { Console.WriteLine("Iniciant descàrrega..."); await DescarregarFitxer(); Console.WriteLine("Descàrrega completada."); } static async Task DescarregarFitxer() { await Task.Delay(3000); // Simula una descàrrega que triga 3 segons Console.WriteLine("Fitxer descarregat."); } }
Exercici 2: Càlcul Asíncron amb Paràmetres
Descripció: Crea un mètode asíncron que accepti dos enters com a paràmetres, simuli un càlcul que triga 1 segon i retorni la seva suma.
Solució:
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { int a = 5; int b = 7; Console.WriteLine("Iniciant càlcul..."); int resultat = await SumarAsincron(a, b); Console.WriteLine($"Resultat del càlcul: {resultat}"); } static async Task<int> SumarAsincron(int x, int y) { await Task.Delay(1000); // Simula un càlcul que triga 1 segon return x + y; // Retorna la suma dels dos paràmetres } }
Errors Comuns i Consells
Errors Comuns
- Oblidar
await
en cridar un mètode asíncron: Això farà que el mètode asíncron s'executi sense esperar el seu resultat. - No marcar un mètode com
async
: Si un mètode contéawait
, ha de ser marcat comasync
.
Consells
- Utilitza la programació asíncrona per a operacions que poden trigar temps, com ara accés a fitxers, operacions de xarxa o càlculs intensius.
- Evita utilitzar
async void
excepte en gestors d'esdeveniments, ja que no permet capturar excepcions de manera efectiva.
Conclusió
La programació asíncrona en C# és una eina poderosa per millorar la resposta i l'eficiència de les aplicacions. Mitjançant l'ús de async
i await
, pots gestionar operacions de manera no bloquejant, permetent que la teva aplicació continuï responent mentre es completen les operacions de fons. Practica amb els exemples i exercicis proporcionats per dominar aquests conceptes.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització