Ü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ünkroonselt,Asü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.
|