Junior
Ce este programarea asincronă folosind cuvintele cheie async și await?
sobes.tech AI
Răspuns de la AI
Programarea asincronă cu async și await permite executarea operațiilor care pot dura mult timp (de exemplu, intrare/ieșire, solicitări de rețea) fără a bloca firul principal de execuție al programului. Acest lucru îmbunătățește capacitatea de răspuns a aplicației.
async: Este utilizat pentru a modifica o metodă și indică compilatorului că în interiorul acesteia vor fi utilizate operatoriiawait. O metodă marcată caasyncpoate returnaTask,Task<T>sauvoid(deșivoidtrebuie evitat, cu excepția handler-ilor de evenimente).TasksauTask<T>returnat reprezintă o operație care nu s-a încheiat încă.await: Se aplică unei operații asincrone (care returneazăTasksauTask<T>). Când execuția ajunge la operatorulawait, metoda "se suspendă", eliberând firul curent. Operația asincronă se execută în fundal (sau folosește un pool de fire, sau mecanismul de intrare/ieșire al sistemului de operare). Când operația se finalizează, execuția metodei se reia după acelașiawaitpe un alt fir sau pe același dacă este disponibil.
Exemplu de utilizare de bază:
// metodă async care returnează Task
public async Task DoSomethingAsync()
{
// Execută o operație asincronă și așteaptă finalizarea acesteia
await Task.Delay(1000); // Simulare a unei operații lungi
Console.WriteLine("Operație asincronă finalizată.");
}
// metodă async care returnează Task<int>
public async Task<int> GetValueAsync()
{
await Task.Delay(500);
return 42;
}
// Utilizarea async și await în metoda Main (pentru exemplu, în aplicații reale, de obicei se pornește dintr-un Main async în .NET Core 3.0+)
public static async Task Main(string[] args)
{
Console.WriteLine("Încep...");
// Apelăm metode asincrone
await DoSomethingAsync();
int result = await GetValueAsync();
Console.WriteLine($"Rezultat: {result}");
Console.WriteLine("Terminare.");
}
Principalul avantaj al async/await față de gestionarea manuală a firelor sau callback-urilor este simplificarea scrierii și citirii codului asincron. Arată aproape ca și codul sincron, dar nu blochează firul, ceea ce este critic pentru aplicațiile cu interfață utilizator sau aplicațiile server cu încărcare mare.