Uppgiftsklass
Task-klassen är en asynkron operationsabstraktion som tillhandahålls efter .NET 4.0, med hela vägen till System.Threading.Tasks.Task.
Task-klassen används för att representera asynkrona operationer utan returvärde, och för asynkrona operationer med returvärden bör underklassen Task i Task-klassen <TResult>användas. Uppgifter som skapas av Task-klassen läggs till i trådpoolen.
De <TResult>huvudsakliga konstruktörerna för klassen Task/Task är följande:
När uppgiften är skapad kan den startas med Start()-metoden:
I faktisk utveckling används den statiska metoden Run() i Task-klassen eller medlemsmetoden StartNew() i fabriksklassen TaskFactory oftare för att skapa och starta nya uppgifter.
Några vanliga metoder i Uppgiftsklassen:
async/await-nyckelordet
C# 5.0 introducerade nyckelorden async och await, vilket gav bättre stöd för samtidighet på språknivå.
Asynkron används för att markera asynkrona metoder: Det asynkrona nyckelordet är ett kontextuellt nyckelord och behandlas endast som ett nyckelord när en metod och Lambda ändras, och kommer att behandlas som en identifierare i andra områden. Det asynkrona nyckelordet kan markera statiska metoder, men inte ingångspunkter (Main()-metoder).
Returvärdet för metoden taggad med async måste vara <TResult>ett av Task, Task eller void. await används för att vänta på resultatet av den asynkrona metoden:
Await-nyckelordet är också ett kontextuellt nyckelord och betraktas endast som ett nyckelord i den asynkrona taggade metoden. Nyckelordet await kan användas före den asynkrona metoden och Task, och <TResult>Task, för att vänta på slutet av den asynkrona uppgiftskörningen. En enkel asynkron metodstruktur är följande:
Det är inte så att metoden är markerad med det asynkrona nyckelordet, det är en asynkron metod, och de satser som visas direkt i den asynkrona metoden körs också synkront,Innehåll som körs asynkront måste köras med Task-klassen。 Faktum är att en asynkron metod som inte innehåller några await-satser kommer att exekveras synkront, varpå kompilatorn ger en varning.
Enkelt exempel, att använda async/await för att mata ut innehåll samtidigt på skärmen:
Utdata: (Mono 4.4.0 & ArchLinux x64)
Det är inte svårt att se från ovanstående program att i den asynkrona nyckelordstaggade asynkrona metoden körs koden före användning av await synkront, och efter att await anropats körs den återstående koden asynkront på en separat tråd.
|