Třída úkolů
Třída Task je asynchronní abstrakce operací poskytovaná po .NET 4.0, s plnou cestou k System.Threading.Tasks.Task.
Třída Task se používá k reprezentaci asynchronních operací bez návratové hodnoty a pro asynchronní operace s návratovými hodnotami by měla být použita podtřída Task třídy Task<TResult>. Úlohy vytvořené třídou Task jsou přidávány do poolu vláken.
<TResult>Hlavní konstruktoři třídy Task/Task jsou následující:
Po vytvoření lze úkol spustit metodou Start():
Při skutečném vývoji se k vytváření a spuštění nových úloh častěji používá statická metoda Run() třídy Task Task nebo členská metoda StartNew() třídy TaskFactory z tovární třídy TaskFactory.
Některé běžné metody v třídě Task:
async/await klíčové slovo
C# 5.0 zavedl async a await klíčová slova, která poskytla lepší podporu souběžnosti na úrovni jazyka.
Async se používá k označení asynchronních metod: Asynchronní klíčové slovo je kontextové klíčové slovo a bude považováno pouze za klíčové slovo při úpravě metody a Lambdy, a v jiných oblastech bude považováno za identifikátor. Asynchronní klíčové slovo může označit statické metody, ale ne vstupní body (Main() metody).
Návratová hodnota metody označené jako async musí být <TResult>Task, Task nebo void. await se používá k čekání na výsledek asynchronní metody:
Klíčové slovo await je rovněž kontextové klíčové slovo a je považováno za klíčové slovo pouze v asynchronní metodě tagování. Klíčové slovo await lze použít před asynchronní metodou a Task, a <TResult>Task, pro čekání na konec asynchronního vykonávání úkolu. Jednoduchá asynchronní struktura metody je následující:
Nejde o to, že by metoda byla označena asynchronním klíčovým slovem, ale jde o asynchronní metodu, a příkazy, které se objevují přímo uvnitř asynchronní metody, jsou také vykonávány synchronně,Obsah vykonávaný asynchronně musí být vykonán pomocí třídy Task。 Ve skutečnosti se synchronní metoda, která neobsahuje žádné příkazy čekat, spustí synchronně, přičemž kompilátor vydá varování.
Jednoduchý příklad, použití async/await pro současné výstupy obsahu na obrazovku:
Výstup: (Mono 4.4.0 & ArchLinux x64)
Není těžké z výše uvedeného programu vidět, že v asynchronní metodě označené asynchronním klíčovým slovem je kód před použitím await vykonán synchronně a po vyvolání await běží zbývající kód asynchronně na samostatném vlákně.
|