Taakklasse
De Task-klasse is een asynchrone operatieabstractie die na .NET 4.0 werd aangeboden, met het volledige pad naar System.Threading.Tasks.Task.
De Task-klasse wordt gebruikt om asynchrone bewerkingen zonder retourwaarde weer te geven, en voor asynchrone bewerkingen met retourwaarden moet de subklasse Task van de Taakklasse worden gebruikt<TResult>. Taken die door de Task-klasse worden aangemaakt, worden toegevoegd aan de threadpool.
De <TResult>belangrijkste constructors van de Task/Task-klasse zijn als volgt:
Eenmaal aangemaakt, kan de taak worden gestart met de Start()-methode:
In de daadwerkelijke ontwikkeling worden de statische methode Run() van de Task-klasse of de lid-methode StartNew() van de factory-klasse TaskFactory vaker gebruikt om nieuwe taken te maken en te starten.
Enkele veelvoorkomende methoden in de Taakklasse:
async/await trefwoord
C# 5.0 introduceerde de sleutelwoorden async en await, wat betere ondersteuning voor gelijktijdigheid op taalniveau bood.
Async wordt gebruikt om asynchrone methoden aan te duiden: Het asynchrone trefwoord is een contextueel trefwoord en wordt alleen als trefwoord behandeld bij het aanpassen van een methode en Lambda, en wordt in andere gebieden als identificatie behandeld. Het asynchrone trefwoord kan statische methoden markeren, maar geen toegangspunten (Main()-methoden).
De retourwaarde van de methode die met asynchroon is getagd, moet <TResult>een van Task, Task of void zijn. await wordt gebruikt om te wachten op het resultaat van de asynchrone methode:
Het await-sleutelwoord is eveneens een contextueel trefwoord en wordt alleen als een trefwoord beschouwd in de asynchroon getagde methode. Het await-sleutelwoord kan vóór de asynchrone methode en Task, en <TResult>Task, worden gebruikt om te wachten tot het einde van de asynchrone taakuitvoering is afgelopen. Een eenvoudige asynchrone methodestructuur is als volgt:
Het is niet zo dat de methode wordt gemarkeerd met het asynchrone trefwoord, het is een asynchrone methode, en de statements die direct binnen de asynchrone methode verschijnen, worden ook synchroon uitgevoerd,Inhoud die asynchroon wordt uitgevoerd, moet worden uitgevoerd met de Task-klasse。 In feite wordt een asynchrone methode die geen await-instructies bevat synchroon uitgevoerd, waarna de compiler een waarschuwing geeft.
Eenvoudig voorbeeld, met async/await om content gelijktijdig op het scherm uit te voeren:
Output: (Mono 4.4.0 & ArchLinux x64)
Het is niet moeilijk te zien uit het bovenstaande programma dat in de asynchrone sleutelwoord getagde asynchrone methode de code vóór gebruik van await synchroon wordt uitgevoerd, en nadat await is aangeroepen, de resterende code asynchroon op een aparte thread draait.
|