Isonjululwe: ubuthongo obungahambelaniyo

Uhlaziyo lokugqibela: 09/11/2023

Kwihlabathi lanamhlanje lenkqubo ye-asynchronous, sijongene nemiceli mngeni emininzi, enye yazo kukuphatha ulibaziseko okanye ukulala ngendlela engahambelaniyo. Yinto eqhelekileyo kwiprogram ehambelanayo yokudala ukulibaziseka ngamabom usebenzisa i-Thread.Sleep (), kodwa kwimeko engavumelaniyo, sisebenzisa i-Task.Delay (). Okokuqala, masingene ngaphakathi kwaye siqonde ukuba yintoni i-async kwaye silindele abaqhubi kunye nesithuba sengxaki abasombululayo.

I-async kwaye ilindele abaSebenzi

C# unayo async kwaye linda amagama angundoqo avumela abaphuhlisi ukuba babhale ikhowudi engatshintshiyo ejongeka ifana kakhulu nekhowudi ye-synchronous. Inkqubo ye-Asynchronous inciphisa imiba ngokuthintela okanye ukulinda imisebenzi ehlala ixesha elide efana ne-I / O, izicelo zenethiwekhi, okanye ukubala okunzima, emva koko kuphuculwe ukusebenza kwenkqubo.

I-async yomsebenzisi kawonke-wonke AsyncMethod()
{
linda Enye indlela ();
}

Kule ndlela ingentla, xa ikhowudi iqhuba kwaye ifikelela kwigama elingundoqo lokulinda, ibuyela kumnxeba kwaye iqhubekele kumgca olandelayo kuphela xa umsebenzi olindelweyo (Enye iMethod ()) igqiba.

Ubuthongo obulungelelanisiweyo Vs Ukulibaziseka kweAsynchronous

Makhe siphonononge umahluko phakathi kwe Thread.Sleep() kunye ne Task.Delay(). Kwikhowudi ehambelanayo, ukuba sifuna ukwazisa ulibaziseko okanye ukunqumamisa ukuphunyezwa kwendlela, sisebenzisa i Thread.Sleep(). Nangona kunjalo, kwimeko engavumelaniyo, sinomsebenzi.Delay() osebenza 'njengobuthongo obungalungelelanisiweyo'.

Uluntu olungenanto SyncMethod()
{
Umsonto.Ubuthongo(1000);
}

I-async yomsebenzisi kawonke-wonke AsyncMethod()
{
lindela uMsebenzi.Ukulibaziseka(1000);
}

Kwi-synchronous method, xa umyalelo 'wobuthongo' ubethwe, umsonto uvaliwe kwaye ulaliswe ixesha elichaziweyo elinokuthi libe nefuthe elibi kwindlela yokusebenza kwenkqubo. Kwindlela ye-asynchronous, xa umyalelo 'wokulibazisa' uphunyeziwe, indlela iyanqunyanyiswa kodwa umsonto ukhutshiwe ubuyele kwidama lemisonto, ngoko ke akukho thintelo.

Ukwakha i-Asynchronous Sleep Method

Masihlanganise indlela ebonisa ingqikelelo yokulala okungavumelaniyo. Qwalasela ukuba sinendlela ethile yokubala enzulu ekufuneka siyihlekise ngokuziphatha.

I-async yoluntu uMsebenzi weComputeIntensiveMethod()
{
kuba (int i = 0; i <5; i++) { ndilinde uMsebenzi.Delay(2000); Console.WriteLine ("Ukuphunyezwa emva kokulibaziseka"); } } [/ikhowudi] Kule ndlela ingentla, i-Task.Delay izakwazisa ukulibaziseka okungahambelaniyo kwemizuzwana emi-2 emva kokuphunyezwa kwengxelo yoshicilelo, ngoko ke kulinganisa ukulala okungahambelaniyo. Inkqubo yeAsynchronous ibalulekile ekwakheni usetyenziso oluphendulayo kunye nolusebenzayo. Ngobuchule obuphambili be-C # obufana ne-async/await kunye ne-Task.Delay (), ungasebenzisa isibonelelo senkqubo yepateni ye-async kwisakhono sayo esipheleleyo. Khumbula ukuba indlela ye-Task.Delay iyasebenza kakhulu xa ithelekiswa ne-Tread.Lala kwihlabathi lenkqubo engahambelaniyo, njengoko ayivaleli intambo ngelixa ibangela ukulibaziseka. Ukusebenzisa la malungelo kunokonyusa kakhulu ukusebenza kwesicelo sakho.

Izithuba ezihambelanayo: