Opgaveklasse
Task-klassen er en asynkron operationsabstraktion, der blev leveret efter .NET 4.0, med den fulde sti til System.Threading.Tasks.Task.
Task-klassen bruges til at repræsentere asynkrone operationer uden returværdi, og for asynkrone operationer med returværdier bør underklassen Task fra Task-klassen anvendes<TResult>. Opgaver, der oprettes af Task-klassen, tilføjes til trådpuljen.
De <TResult>vigtigste konstruktører af Task/Task-klassen er som følger:
Når opgaven er oprettet, kan den startes ved hjælp af Start()-metoden:
I den faktiske udvikling bruges den statiske metode Run() i Task-klassen eller medlemsmetoden StartNew() i factory-klassen TaskFactory oftere til at oprette og starte nye opgaver.
Nogle almindelige metoder i opgaveklassen:
async/await-nøgleordet
C# 5.0 introducerede async og await-nøgleordene, som gav bedre understøttelse af samtidighed på sprogniveau.
Async bruges til at markere asynkrone metoder: Det asynkrone nøgleord er et kontekstuelt nøgleord og behandles kun som et nøgleord, når en metode og Lambda ændres, og vil blive behandlet som en identifikator i andre områder. Det asynkrone nøgleord kan markere statiske metoder, men ikke indgangspunkter (Main()-metoder).
Returværdien for metoden, der er tagget med asynkron, skal være <TResult>én af Task, Task eller void. await bruges til at vente på resultatet af den asynkrone metode:
Await-nøgleordet er ligeledes et kontekstuelt nøgleord og betragtes kun som et nøgleord i den asynkrone taggede metode. Nøgleordet await kan bruges før den asynkrone metode og Task, og <TResult>Task, for at vente på slutningen af den asynkrone opgaveudførelse. En simpel asynkron metodestruktur er som følger:
Det er ikke sådan, at metoden er markeret med det asynkrone nøgleord, det er en asynkron metode, og de sætninger, der optræder direkte inde i den asynkrone metode, udføres også synkront,Indhold, der udføres asynkront, skal udføres ved hjælp af Task-klassen。 Faktisk vil en asynkron metode, der ikke indeholder nogen await-sætninger, blive udført synkront, hvorefter compileren vil give en advarsel.
Simpelt eksempel, hvor man bruger async/await til at outputte indhold samtidig på skærmen:
Output: (Mono 4.4.0 & ArchLinux x64)
Det er ikke svært at se ud fra ovenstående program, at i den asynkrone nøgleordsmærkede asynkrone metode udføres koden før brug af await synkront, og efter at await er kaldt, kører den resterende kode asynkront på en separat tråd.
|