Junior
Čo je asynchrónne programovanie s použitím kľúčových slov async a await?
sobes.tech AI
Odpoveď od AI
Asynchrónne programovanie s async a await umožňuje vykonávať operácie, ktoré môžu trvať dlhú dobu (napríklad vstup a výstup, sieťové požiadavky), bez blokovania hlavného vlákna vykonávania programu. To zlepšuje odozvu aplikácie.
async: Používa sa na modifikáciu metódy a naznačuje prekompilátoru, že vo vnútri budú používané operátoryawait. Metóda označená akoasyncmôže vracaťTask,Task<T>alebovoid(hocivoidby sa malo vyhýbať, okrem spracovateľov udalostí). VrátenýTaskaleboTask<T>predstavuje operáciu, ktorá ešte nie je dokončená.await: Používa sa na asynchrónnu operáciu (vracajúcuTaskaleboTask<T>). Keď vykonanie dosiahne operátorawait, metóda sa "pozastaví" a uvoľní aktuálne vlákno. Asynchrónna operácia sa vykonáva na pozadí (alebo využíva pool vlákien, alebo mechanizmus vstupu-výstupu operačného systému). Keď sa operácia dokončí, vykonávanie metódy sa obnoví po tom istomawaitna inom vlákne alebo na tom istom vlákne, ak je dostupné.
Príklad základného použitia:
// async metóda, ktorá vracia Task
public async Task DoSomethingAsync()
{
// Vykonávame asynchrónnu operáciu a čakáme na jej dokončenie
await Task.Delay(1000); // Napodobnenie dlhodobej operácie
Console.WriteLine("Async operácia dokončená.");
}
// async metóda, ktorá vracia Task<int>
public async Task<int> GetValueAsync()
{
await Task.Delay(500);
return 42;
}
// Použitie async a await v metóde Main (pre príklad, v reálnych aplikáciách sa zvyčajne spúšťa z async Main v .NET Core 3.0+)
public static async Task Main(string[] args)
{
Console.WriteLine("Začiatok...");
// Voláme asynchrónne metódy
await DoSomethingAsync();
int result = await GetValueAsync();
Console.WriteLine($"Výsledok: {result}");
Console.WriteLine("Dokončené.");
}
Hlavnou výhodou async/await v porovnaní s ručnou správou vlákien alebo kolbíkmi je zjednodušenie písania a čítania asynchrónneho kódu. Vyzerá takmer rovnako ako synchronný kód, ale pritom neblokuje vlákno, čo je kriticky dôležité pre aplikácie s používateľským rozhraním alebo serverové aplikácie s vysokou záťažou.