Junior
Mi az az aszinkron programozás az async és await kulcsszavak használatával?
sobes.tech MI
Válasz az MI-től
Az async és await segítségével történő aszinkron programozás lehetővé teszi olyan műveletek végrehajtását, amelyek hosszabb időt vehetnek igénybe (például bemenet/kimenet, hálózati kérések), anélkül, hogy blokkolná a program fő szálát. Ez javítja az alkalmazás válaszkészségét.
async: Ezt a módszert módosításhoz használják, és jelzi a fordítónak, hogy belülawaitoperátorokat fognak használni. Egyasync-al jelölt módszer visszaadhatTask,Task<T>vagyvoidértéket (bár avoid-t kerülni kell, kivéve eseménykezelőknél). A visszatérőTaskvagyTask<T>egy olyan műveletet reprezentál, amely még nem fejeződött be.await: Egy aszinkron műveletre alkalmazható (amelyTaskvagyTask<T>-t ad vissza). Amikor a végrehajtás eléri azawait-et, a módszer "szünetel", és felszabadítja a jelenlegi szálat. Az aszinkron művelet háttérben fut (vagy szálkészletet használ, vagy az operációs rendszer bemeneti/kimeneti mechanizmusát). Amikor a művelet befejeződik, a módszer végrehajtása folytatódik ugyanazon azawait-en túl, más szálon vagy ugyanazon, ha az elérhető.
Alapvető használati példa:
// async módszer, amely Task-et ad vissza
public async Task DoSomethingAsync()
{
// Aszinkron művelet végrehajtása, és a befejezés várása
await Task.Delay(1000); // Hosszú művelet szimulálása
Console.WriteLine("Aszinkron művelet befejeződött.");
}
// async módszer, amely Task<int>-et ad vissza
public async Task<int> GetValueAsync()
{
await Task.Delay(500);
return 42;
}
// Az async és await használata a Main metódusban (például, valódi alkalmazásokban általában async Main-ből indítják .NET Core 3.0+ alatt)
public static async Task Main(string[] args)
{
Console.WriteLine("Kezdés...");
// Aszinkron módszerek hívása
await DoSomethingAsync();
int result = await GetValueAsync();
Console.WriteLine($"Eredmény: {result}");
Console.WriteLine("Befejeződött.");
}
Az async/await fő előnye a kézi szálkezeléshez vagy callback-ekhez képest az, hogy egyszerűsíti az aszinkron kód írását és olvasását. Szinte ugyanúgy néz ki, mint a szinkron kód, de nem blokkolja a szálat, ami kritikus felhasználói felülettel rendelkező vagy nagy terhelésű szerveralkalmazások esetén.