Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 31433|Odpoveď: 5

[Zdroj] .net/c# Trieda úloh s async/await

[Kopírovať odkaz]
Zverejnené 20. 10. 2017 22:32:17 | | |
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ú synchronneObsah 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.





Predchádzajúci:fsadf{:1_2:}
Budúci:RestSharp a. NET(C#) HTTP helper class component
Zverejnené 1. 11. 2017 19:57:12 |
Pozrite sa, pozrite sa, pozrite sa
Zverejnené 29. 1. 2019 9:37:53 |
Dlho som hľadal na Baidu #async Task Invoke()Zistil som, že stojímVyššie uvedená metóda používa asynchrónne kľúčové slovo na vrátenie metódy Invoke triedy Task, ktorá tiež rieši problém s vláknami, aký je význam celej tejto funkcie?
Zverejnené 29. 1. 2019 21:14:36 |
To je naozaj dobrá vec a napíšem takéto zdieľanie, keď budem mať čas
Zverejnené 15. 2. 2019 16:17:22 |
Výstupný výsledok nemôže jasne vidieť vplyv asynchrónneho vykonávania a asynchrónny vstup by mal byť súčasný
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com