Trieda úloh
Trieda Task je asynchrónna abstrakcia operácií poskytovaná po .NET 4.0, s plnou cestou k System.Threading.Tasks.Task.
Trieda Task sa používa na reprezentáciu asynchrónnych operácií bez návratovej hodnoty a pre asynchrónne operácie s vrátenými hodnotami by sa mala použiť podtrieda Task triedy Task<TResult>. Úlohy vytvorené triedou Task sa pridávajú do poolu vlákien.
<TResult>Hlavní konštruktori triedy Task/Task sú nasledovní:
Po vytvorení je možné úlohu spustiť pomocou metódy Start():
V skutočnom vývoji sa statická metóda Run() triedy Task alebo členská metóda StartNew() triedy factory TaskFactory častejšie používajú na vytváranie a spúšťanie nových úloh.
Niektoré bežné metódy v triede Task:
async/await kľúčové slovo
C# 5.0 zaviedol kľúčové slová async a await, čo poskytlo lepšiu podporu súbežnosti na úrovni jazyka.
Async sa používa na označenie asynchrónnych metód: Asynchrónne kľúčové slovo je kontextové kľúčové slovo a bude považované za kľúčové slovo iba pri úprave metódy a Lambda, a v iných oblastiach bude považované za identifikátor. Asynchrónne kľúčové slovo môže označovať statické metódy, ale nie vstupné body (Main() metódy).
Návratová hodnota metódy označenej ako async musí byť <TResult>Task, Task alebo void. await sa používa na čakanie na výsledok asynchrónnej metódy:
Kľúčové slovo čakať je tiež kontextové kľúčové slovo a považuje sa za kľúčové slovo iba v asynchrónnej metóde označenia. Kľúčové slovo await možno použiť pred asynchrónnou metódou a Task, a <TResult>Task, na čakanie na koniec asynchrónneho vykonávania úlohy. Jednoduchá asynchrónna štruktúra metódy je nasledovná:
Nejde o to, že by metóda bola označená asynchrónnym kľúčovým slovom, je to asynchrónna metóda a príkazy, ktoré sa objavujú priamo v asynchrónnej metóde, sa tiež vykonávajú synchronne,Obsah vykonávaný asynchrónne musí byť vykonávaný pomocou triedy Task。 V skutočnosti sa synchronne spustí asynchrónna metóda, ktorá neobsahuje žiadne príkazy čakania, pričom kompilátor vydá varovanie.
Jednoduchý príklad, použitie async/await na súčasný výstup obsahu na obrazovku:
Výstup: (Mono 4.4.0 & ArchLinux x64)
Nie je ťažké vidieť z vyššie uvedeného programu, že v asynchrónnej metóde označenej kľúčovým slovom sa kód pred použitím await vykoná synchronne a po zavolaní await beží zvyšný kód asynchrónne na samostatnom vlákne.
|