See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 31433|Vastuse: 5

[Allikas] .net/c# Ülesandeklass asünkroon/awaitiga

[Kopeeri link]
Postitatud 20.10.2017 22:32:17 | | |
Ülesandeklass

Ülesandeklass on asünkroonne operatsioonide abstraktsioon, mis on pakutud pärast .NET 4.0 ning millel on täielik tee System.Threading.Tasks.Task.

Task-klassi kasutatakse asünkroonsete operatsioonide esindamiseks ilma tagastusväärtuseta, ning asünkroonsete operatsioonide puhul, millel on tagastusväärtused, tuleks kasutada Task klassi alamklassi Task<TResult>.
Ülesandeklassi loodud ülesanded lisatakse lõimede basseini.

<TResult>Task/Task klassi peamised konstruktorid on järgmised:


Kui ülesanne on loodud, saab alustada Start() meetodiga:


Tegelikus arenduses kasutatakse uute ülesannete loomiseks ja käivitamiseks sagedamini staatilist meetodit Run() Task klassist või liikmemeetodit StartNew() tehase klassist TaskFactory.

Mõned levinumad meetodid ülesandeklassis:


asünkroonne/await märksõnaga

C# 5.0 tutvustas asünkroonseid ja ootavaid märksõnu, mis pakkusid paremat toetust samaaegsusele keeletasemel.

Asünkroonset meetodit kasutatakse asünkroonsete meetodite märgistamiseks:
Asünkroonne märksõna on kontekstuaalne märksõna ja seda käsitletakse märksõnana ainult meetodi ja Lambda muutmisel ning teistes valdkondades käsitletakse seda identifikaatorina.
Asünkroonne märksõna võib tähistada staatilisi meetodeid, kuid mitte sisenemispunkte (Main() meetodid).
Asünkroonse märgiga märgistatud meetodi tagastusväärtus peab olema <TResult>Task, Task või void.
Await kasutatakse asünkroonse meetodi tulemuse ootamiseks:
Await märksõna on samuti kontekstuaalne märksõna ja seda loetakse märksõnaks ainult asünkroonselt märgistatud meetodis.
Await märksõna saab kasutada enne asünkroonset meetodit ja Task, <TResult>ning Task, et oodata asünkroonse ülesande täitmise lõppu.
Lihtne asünkroonse meetodi struktuur on järgmine:
See ei tähenda, et meetod oleks märgitud asünkroonse märksõnaga, vaid asünkroonne meetod ning otse asünkroonse meetodi sees olevad laused täidetakse samuti sünkroonseltAsünkroonselt täidetud sisu tuleb täita Task klassi abil
Tegelikult käivitatakse asünkroonne meetod, mis ei sisalda ühtegi oote-lauset, sünkroonselt, mille järel kompilaator annab hoiatuse.

Lihtne näide, kasutades asünkroonset/ootamist sisu samaaegseks väljundiks ekraanil:

Väljund: (Mono 4.4.0 && ArchLinux x64)

Ülaltoodud programmist ei ole raske näha, et asünkroonses märksõnas märgistatud asünkroonmeetodis käivitatakse kood enne await kasutamist sünkroonselt ning pärast await kutsumist töötab ülejäänud kood asünkroonselt eraldi lõimes.





Eelmine:fsadf{:1_2:}
Järgmine:RestSharp a. NET(C#) HTTP abiklassi komponent
Postitatud 01.11.2017 19:57:12 |
Vaata, vaata, vaata
Postitatud 29.01.2019 09:37:53 |
Otsisin kaua Baidu peal #async Task Invoke()Leidsin end seismasÜlaltoodud meetod kasutab asünkroonset märksõna, et tagastada ülesandeklassi Invoke meetod, mis lahendab ka lõimeprobleemi – mis on kogu selle funktsiooni tähendus?
Postitatud 29.01.2019 21:14:36 |
See on tõesti hea asi ja ma kirjutan sellise jagamise, kui mul aega on
Postitatud 15.02.2019 16:17:22 |
Väljundtulemus ei näe selgelt asünkroonse täitmise mõju ning asünkroonne sisend peaks olema samaaegne
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com