Junior
Kas yra asinchroninis programavimas naudojant raktinius žodžius async ir await?
sobes.tech AI
Atsakymas iš AI
Asinchroninis programavimas su async ir await leidžia vykdyti operacijas, kurios gali užtrukti ilgai (pavyzdžiui, įvesties-išvesties, tinklo užklausos), neblokiruojant pagrindinio vykdymo srauto. Tai pagerina programėlės reagavimą.
async: Naudojamas metodo modifikatoriui ir nurodo kompiliatoriui, kad jame bus naudojamiawaitoperatoriai. Metodas, pažymėtas kaipasync, gali grąžintiTask,Task<T>arbavoid(norsvoidreikėtų vengti, išskyrus įvykių tvarkytojus). GrąžintasTaskarbaTask<T>atstovauja operaciją, kuri dar nėra baigta.await: Taikomas asinchroninei operacijai (grąžinančiaiTaskarbaTask<T>). Kai vykdymas pasiekiaawait, metodas "laikinai sustoja" ir atlaisvina dabartinį srautą. Asinchroninė operacija vykdoma foniniame režime (arba naudoja srautų pool'ą, arba operacinės sistemos įvesties-išvesties mechanizmą). Kai operacija baigiasi, vykdymas atnaujinamas po to patiesawaitarba tame pačiame sraute, jei jis yra prieinamas.
Pagrindinis pavyzdys:
// async metodas, grąžinantis Task
public async Task DoSomethingAsync()
{
// Vykdome asinchroninę operaciją ir laukiame jos pabaigos
await Task.Delay(1000); // Ilgo veiksmo imitacija
Console.WriteLine("Async operacija baigta.");
}
// async metodas, grąžinantis Task<int>
public async Task<int> GetValueAsync()
{
await Task.Delay(500);
return 42;
}
// Async ir await naudojimas Main metode (pavyzdžiui, dažniausiai paleidžiama iš async Main .NET Core 3.0+)
public static async Task Main(string[] args)
{
Console.WriteLine("Pradedama...");
// Kviečiame asinchronines funkcijas
await DoSomethingAsync();
int result = await GetValueAsync();
Console.WriteLine($"Rezultatas: {result}");
Console.WriteLine("Baigta.");
}
Pagrindinis async/await pranašumas – palengvina asinchroninio kodo rašymą ir skaitymą, nes jis atrodo kaip sinchroninis, bet neblokuoja srauto, kas yra itin svarbu programėlėse su vartotojo sąsaja ar serverinėse programose su dideliu apkrovimu.