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 awaitasync: Aquesta paraula clau s'utilitza per marcar un mètode com a asíncron. Un mètodeasyncpot 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 comasyncperquè crida aOperacioAsincronaambawait.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
awaiten 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 voidexcepte 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ó
