Lahendatud: asünkroonne uni

Viimane uuendus: 09/11/2023

Tänapäeva asünkroonse programmeerimise maailmas seisame silmitsi paljude väljakutsetega, millest üks on viivituste või unerežiimi käsitlemine asünkroonsel viisil. Sünkroonse programmeerimise puhul on tavaline, et Thread.Sleep() abil tekitatakse tahtlik viivitus, kuid asünkroonses kontekstis kasutame Task.Delay(). Kõigepealt sukeldume sisse ja mõistame, mis on asünkroonimis- ja ooteoperaatorid ning probleemiruum, mida nad lahendavad.

Asünkroon ja ootab operaatoreid

C#-l on märksõnad „async” ja „await” , mis võimaldavad arendajatel kirjutada asünkroonset koodi, mis näeb välja väga sarnane sünkroonse koodiga. Asünkroonne programmeerimine leevendab probleeme, mis on seotud pikkade toimingute (nt sisend/väljund, võrgupäringud või mahukad arvutused) blokeerimise või ootamisega, parandades seeläbi süsteemi jõudlust.

avalik asünkroonimisülesanne AsyncMethod()
{
oota teine ​​meetod();
}

Ülaltoodud meetodi puhul naaseb kood, kui kood käivitab ja jõuab ootemärksõnani, helistaja juurde ja liigub järgmisele reale alles siis, kui oodatud ülesanne (AnotherMethod()) on lõpule viidud.

Sünkroonne uni vs asünkroonne viivitus

Uurime Thread.Sleep() ja Task.Delay() erinevust. Kui tahame sünkroonses koodis viivitust või meetodi täitmist peatada, kasutame Thread.Sleep(). Kuid asünkroonse stsenaariumi korral on meil Task.Delay(), mis toimib nagu "asünkroonne uni".

public void SyncMethod()
{
Thread.Sleep(1000);
}

avalik asünkroonimisülesanne AsyncMethod()
{
oota Task.Delay(1000);
}

Sünkroonse meetodi puhul blokeeritakse niit, kui vajutatakse unerežiimi käsku, ja see lülitub määratud ajaks magama, mis võib süsteemi jõudlust negatiivselt mõjutada. Asünkroonse meetodi puhul, kui viivituskäsk täidetakse, meetod peatatakse, kuid lõim vabastatakse tagasi lõimekogumisse, seega ummistust ei esine.

Asünkroonse une meetodi loomine

Paneme kokku meetodi, mis illustreerib asünkroonse une mõistet. Mõelge, et meil on mõni arvutusmahukas meetod, mille pärast peame käitumist mõnitama.

avalik asünkroonimisülesanne ComputeIntensiveMethod()
{
for (int i = 0; i < 5; i++) { ootama Task.Delay(2000); Console.WriteLine("Täitmine pärast viivitust"); } } [/code] Ülaltoodud meetodi puhul kehtestab Task.Delay asünkroonse viivituse 2 sekundit pärast iga prindilause täitmist, simuleerides seega asünkroonset und. Asünkroonne programmeerimine on tundlike ja tõhusate rakenduste loomiseks ülioluline. Tänu C# täiustatud võimalustele, nagu async/await ja Task.Delay(), saate asünkroonmustri programmeerimise eeliseid täiel määral ära kasutada. Pidage meeles, et Task.Delay meetod on asünkroonses programmeerimismaailmas Thread.Sleep'iga võrreldes palju tõhusam, kuna see ei blokeeri lõime, põhjustades viivitust. Nende õiguste kasutamine võib teie rakenduse jõudlust märkimisväärselt suurendada.

Seonduvad postitused: