Sobes.tech
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 operatorii await. O metodă marcată ca async poate returna Task, Task<T> sau void (deși void trebuie evitat, cu excepția handler-ilor de evenimente). Task sau Task<T> returnat reprezintă o operație care nu s-a încheiat încă.
  • await: Se aplică unei operații asincrone (care returnează Task sau Task<T>). Când execuția ajunge la operatorul await, 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și await pe 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.