Oppgaveklasse
Task-klassen er en asynkron operasjonsabstraksjon som ble gitt etter .NET 4.0, med full sti til System.Threading.Tasks.Task.
Task-klassen brukes til å representere asynkrone operasjoner uten returverdi, og for asynkrone operasjoner med returverdier bør underklassen Task i Task-klassen <TResult>brukes. Oppgaver opprettet av Task-klassen legges til trådpoolen.
<TResult>Hovedkonstruktørene av Task/Task-klassen er som følger:
Når oppgaven er opprettet, kan den startes ved hjelp av Start()-metoden:
I faktisk utvikling brukes den statiske metoden Run() i Task-klassen eller medlemsmetoden StartNew() i fabrikk-klassen TaskFactory oftere til å opprette og starte nye oppgaver.
Noen vanlige metoder i oppgaveklassen:
async/await-nøkkelordet
C# 5.0 introduserte async og await-nøkkelordene, som ga bedre støtte for samtidighet på språknivå.
Asynkron brukes til å markere asynkrone metoder: Det asynkrone nøkkelordet er et kontekstuelt nøkkelord og vil kun bli behandlet som et nøkkelord når en metode og Lambda endres, og vil bli behandlet som en identifikator i andre områder. Det asynkrone nøkkelordet kan markere statiske metoder, men ikke inngangspunkter (Main()-metoder).
Returverdien til metoden merket med asynkron må være <TResult>én av Task, Task eller void. await brukes til å vente på resultatet av den asynkrone metoden:
Await-nøkkelordet er også et kontekstuelt nøkkelord og regnes kun som et nøkkelord i den asynkrone taggede metoden. Nøkkelordet await kan brukes før den asynkrone metoden og Task, og <TResult>Task, for å vente på slutten av den asynkrone oppgaven. En enkel asynkron metodestruktur er som følger:
Det er ikke slik at metoden er merket med det asynkrone nøkkelordet, det er en asynkron metode, og setningene som vises direkte inne i den asynkrone metoden utføres også synkront,Innhold som utføres asynkront må utføres med Task-klassen。 Faktisk vil en asynkron metode som ikke inneholder noen await-setninger bli kjørt synkront, og da vil kompilatoren gi en advarsel.
Enkelt eksempel, ved å bruke async/await for å sende innhold samtidig på skjermen:
Utdata: (Mono 4.4.0 & ArchLinux x64)
Det er ikke vanskelig å se fra programmet ovenfor at i den asynkrone nøkkelordmerket asynkrone metoden, kjøres koden før bruk av await synkront, og etter at await er kalt, kjører resten av koden asynkront på en separat tråd.
|