Turinys:
- Apibrėžimas - ką reiškia asinchroninio metodo iškvietimas?
- „Techopedia“ paaiškina asinchroninio metodo iškvietimą
Apibrėžimas - ką reiškia asinchroninio metodo iškvietimas?
Asinchroninio metodo skambutis yra .NET programavime naudojamas metodas, kuris grįžta į skambinantįjį prieš pat jo apdorojimą ir neužblokuojant skambučio gijos.
Kai programa iškviečia asinchroninį metodą, ji gali tuo pačiu metu būti vykdoma kartu su asinchroniniu metodu, kuris atlieka savo užduotį. Asinchroninis metodas vykdomas atskirai nuo pagrindinio programos gijos. Apdorojimo rezultatai pateikiami per kitą kvietimą kita gija.
Asinchroniniai metodai padeda optimizuoti išteklių vykdymą, todėl pritaikoma mastelį. Jie naudojami atliekant daug laiko reikalaujančias užduotis, pavyzdžiui, atidarant didelius failus, prisijungiant prie nuotolinių kompiuterių, ieškant duomenų bazės, skambinant žiniatinklio tarnyboms ir ASP.NET žiniatinklio formoms.
Asinchroninio metodo skambutis taip pat gali būti vadinamas asinchroninio metodo iškvietimu (AMI).
„Techopedia“ paaiškina asinchroninio metodo iškvietimą
Asinchroninis metodas skiriasi nuo sinchroninio metodo tuo, kaip jis grįžta iš skambučio. Nors asinchroninio metodo skambutis iškart grįžta, leidžiančiam skambinančiajai programai atlikti kitas operacijas, sinchroninio metodo skambučiai, prieš tęsdami programos srautą, palaukite, kol metodas bus baigtas.
.NET sistemoje yra įmontuota asinchroninė infrastruktūra, kad bet kurį metodą būtų galima naudoti asinchroniškai nekeičiant jo kodo.
.NET karkasas pateikia du projektavimo modelius asinchroniniam metodui įgyvendinti, ty tuos, kuriuose naudojami asinchroniniai delegatai („IASyncResult“ objektai) ir įvykiai. Asinchroninių delegatų modelis yra sudėtingesnis ir suteikia lankstumo, todėl jis gerai tinka įvairiems sudėtingiems programavimo modeliams. Įvykiais pagrįstas modelis yra paprastas ir turėtų būti naudojamas daugeliu atvejų.
Asinchroniniame delegatų modelyje delegato objektas naudoja du metodus: „BeginInvoke“ ir „EndInvoke“. „BeginInvoke“ turi parametrų, panašių į jo „suvyniotą“ funkciją, sąrašą su dviem papildomais pasirenkamaisiais parametrais; jis grąžina „IAsyncResult“ objektą. „EndInvoke“ kartu su „IAsyncResult“ objektu grąžina du parametrus (išeinantį ir nuorodos tipą). „BeginInvoke“ naudojamas asinchroniniam skambučiui inicijuoti, tuo tarpu „EndInvoke“ naudojamas asinchroninio skambučio rezultatams gauti.
Įvykiais pagrįsti asinchroniniai modeliai naudoja klasę, kurioje yra vienas ar keli metodai, pavadinti „MethodNameAsync“, kurie turi atitinkamas sinchronines versijas, kurios vykdomos dabartiniame gijoje. Įvykiais pagrįsti modeliai taip pat gali turėti „MethodNameCompleted“ įvykį ir „MethodNameAsyncCancel“ metodą. Šis modelis leidžia klasei susisiekti su laukiančiomis asinchroninėmis operacijomis, naudojant deleguotojo įvykio modelį.
Čia pateikiami keli patarimai, susiję su asinchroniniais metodais:
- Norint išvengti aukšto suderinamumo, reikia vengti asinchroninių metodų
- Perduodant bendro objekto nuorodas reikia būti atsargiems
- EndXXX (vadinamas asinchroninio operacijos pabaigoje) turi būti iškviestas, kad būtų pakartotos išimtys ir išvengta nesėkmių
- Gaudami ir išsaugodami visus išimtinius objektus asinchroniniu metodu, jis gali būti pakartotas „EndXXX“ skambučio metu
- Vartotojo sąsajos valdikliai, inicijuojantys ilgai veikiančias asinchronines operacijas, turi būti išjungti, jei jie reikalingi tik tam tikslui
- Asinchroniniai metodai turi būti įgyvendinami suprantant daugybinį sriegį ir ten, kur jie yra efektyvesni nei naudojant sinchroninius metodus.
