Tehtäväluokka
Tehtäväluokka on asynkroninen operaatioabstraktio, joka on tarjottu .NET 4.0:n jälkeen, ja jossa on koko polku System.Threading.Tasks.Task-tiedostoon.
Tehtäväluokkaa käytetään esittämään asynkronisia operaatioita ilman palautusarvoa, ja asynkronisissa operaatioissa, joissa on palautusarvoja, tulisi käyttää Tehtäväluokan aliluokkaa Tehtävä<TResult>. Tehtäväluokan luomat tehtävät lisätään säikepooliin.
<TResult>Tehtävä/tehtäväluokan pääkonstruktorit ovat seuraavat:
Kun tehtävä on luotu, se voidaan käynnistää Start()-menetelmällä:
Varsinaisessa kehityksessä Task-luokan staattista metodia Run() tai tehdasluokan TaskFactoryn jäsenmetodia StartNew() käytetään useammin uusien tehtävien luomiseen ja käynnistämiseen.
Joitakin yleisiä metodeja Task-luokassa:
async/await -avainsana
C# 5.0 esitteli asynkronis- ja odotusavainsanat, jotka antoivat paremman tuen samanaikaisuudelle kielitasolla.
Asynkronia käytetään asynkronisten menetelmien merkitsemiseen: Asynkroninen avainsana on kontekstuaalinen avainsana ja sitä käsitellään avainsanana vain metodia ja Lambdaa muokatessa, ja sitä käsitellään tunnisteena muilla alueilla. Asynkroninen avainsana voi merkitä staattisia metodeja, mutta ei sisääntulopisteitä (Main()-metodit).
Asynkronilla merkityn metodin palautusarvon tulee olla <TResult>Tehtävä, Tehtävä tai void. Await käytetään odottamaan asynkronisen menetelmän tulosta:
Await-avainsana on myös kontekstuaalinen avainsana ja sitä pidetään avainsanana vain asynkronisesti tunnistetussa menetelmässä. Await-avainsanaa voidaan käyttää ennen asynkronista metodia ja Taskia, ja <TResult>Taskia, jotta voidaan odottaa asynkronisen tehtävän suorituksen loppua. Yksinkertainen asynkroninen metodirakenne on seuraava:
Kyse ei ole siitä, että metodi olisi merkitty asynkronisella avainsanalla, vaan se on asynkroninen metodi, ja ne lauseet, jotka esiintyvät suoraan asynkronisen metodin sisällä, suoritetaan myös synkronisesti,Asynkronisesti suoritettu sisältö täytyy suorittaa Task-luokalla。 Itse asiassa asynkroninen metodi, joka ei sisällä odotuslauseita, suoritetaan synkronisesti, jolloin kääntäjä antaa varoituksen.
Yksinkertainen esimerkki, käyttämällä asynkronia/odotusta sisällön samanaikaiseen tuottamiseen näytölle:
Tulostus: (Mono 4.4.0 && ArchLinux x64)
Yllä olevasta ohjelmasta ei ole vaikea nähdä, että asynkronisessa avainsanassa asynchronous methodissa koodi ennen awaitin käyttöä suoritetaan synkronisesti, ja awaitin kutsun jälkeen jäljelle jäävä koodi suoritetaan asynkronisesti erillisessä säikeessä.
|