Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 31433|Atsakyti: 5

[Šaltinis] .net/c# Užduočių klasė su asinchroniniu / laukti

[Kopijuoti nuorodą]
Paskelbta 2017-10-20 22:32:17 | | |
Užduočių klasė

Užduočių klasė yra asinchroninė operacijų abstrakcija, pateikiama po .NET 4.0, su visu keliu į System.Threading.Tasks.Task.

Task klasė naudojama asinchroninėms operacijoms be grąžinamos reikšmės pavaizduoti, o asinchroninėms operacijoms su grąžinamomis reikšmėmis turėtų būti naudojamas Task klasės poklasis Task<TResult>.
Užduočių klasės sukurtos užduotys įtraukiamos į gijų telkinį.

<TResult>Pagrindiniai Task/Task klasės konstruktoriai yra šie:


Sukūrus užduotį galima pradėti naudojant Start() metodą:


Kuriant ir pradedant naujas užduotis, statinis Task klasės metodas Run() arba gamyklinės klasės TaskFactory nario metodas StartNew() dažniau naudojamas naujoms užduotims kurti ir pradėti.

Keletas įprastų užduočių klasės metodų:


Raktažodis asinchroninis / laukti

C# 5.0 pristatė asinchroninius ir laukimo raktažodžius, kurie geriau palaikė sutapimą kalbos lygiu.

Async naudojamas asinchroniniams metodams pažymėti:
Asinchroninis raktažodis yra kontekstinis raktažodis ir bus traktuojamas kaip raktažodis tik keičiant metodą ir Lambda, o kitose srityse bus traktuojamas kaip identifikatorius.
Asinchroninis raktažodis gali žymėti statinius metodus, bet ne įėjimo taškus (Main() metodus).
Metodo, pažymėto asinchronizacija, grąžinama reikšmė turi būti <TResult>Užduotis, Užduotis arba Void.
"Await" naudojamas laukti asinchroninio metodo rezultato:
Laukimo raktažodis taip pat yra kontekstinis raktažodis ir laikomas raktiniu žodžiu tik asinchroniniu pažymėtu metodu.
Raktažodis laukti gali būti naudojamas prieš asinchroninį metodą ir Užduotis bei <TResult>Užduotis, laukiant asinchroninės užduoties vykdymo pabaigos.
Paprasta asinchroninio metodo struktūra yra tokia:
Nėra taip, kad metodas pažymėtas asinchroniniu raktažodžiu, tai yra asinchroninis metodas, o teiginiai, kurie rodomi tiesiai asinchroninio metodo viduje, taip pat vykdomi sinchroniškaiAsinchroniškai vykdomas turinys turi būti vykdomas naudojant užduočių klasę
Tiesą sakant, asinchroninis metodas, kuriame nėra jokių laukimo sakinių, bus vykdomas sinchroniškai, tada kompiliatorius pateiks įspėjimą.

Paprastas pavyzdys, naudojant asinchroninį / laukti išvesti turinį vienu metu ekrane:

Išvestis: (Mono 4.4.0 ir ArchLinux x64)

Iš aukščiau pateiktos programos nesunku pastebėti, kad asinchroniniame raktažodyje pažymėtas asinchroninis metodas, kodas prieš naudojant await vykdomas sinchroniškai, o iškvietus await likęs kodas veikia asinchroniškai atskiroje gijoje.





Ankstesnis:fsadf{:1_2:}
Kitą:RestSharp a. NET(C#) HTTP pagalbinės klasės komponentas
Paskelbta 2017-11-01 19:57:12 |
Pažiūrėk, pažiūrėk, pažiūrėk
Paskelbta 2019-01-29 09:37:53 |
Ilgai ieškojau "Baidu" #asinchroninis užduoties iškvietimas()Aš atsidūriau stovintisAukščiau pateiktas metodas naudoja asinchroninį raktažodį, kad grąžintų "Task" klasės "Invoke" metodą, kuris taip pat išsprendžia gijos problemą, kokia visos šios funkcijos prasmė?
Paskelbta 2019-01-29 21:14:36 |
Tai tikrai geras dalykas, ir aš parašysiu tokį pasidalinimą, kai turėsiu laiko
Paskelbta 2019-02-15 16:17:22 |
Išvesties rezultatas negali aiškiai matyti asinchroninio vykdymo efekto, o asinchroninė įvestis turėtų būti vienu metu
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com