Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 31433|Răspunde: 5

[Sursă] .net/c# Clasă de sarcini cu async/await

[Copiază linkul]
Postat pe 20.10.2017 22:32:17 | | |
Clasa de lucru

Clasa Task este o abstracție asincronă a operațiilor furnizată după .NET 4.0, cu calea completă către System.Threading.Tasks.Task.

Clasa Task este folosită pentru a reprezenta operații asincrone fără valoare de returnare, iar pentru operații asincrone cu valori de return, subclasa Task din clasa Task trebuie <TResult>folosită.
Sarcinile create de clasa Task sunt adăugate în pool-ul de fire.

<TResult>Principalii constructori ai clasei Task/Task sunt următorii:


Odată creată, sarcina poate fi începută folosind metoda Start():


În dezvoltarea propriu-zisă, metoda statică Run() a clasei Task sau metoda membru StartNew() a clasei factory TaskFactory sunt folosite mai des pentru a crea și începe sarcini noi.

Câteva metode comune în clasa Task:


cuvântul cheie async/await

C# 5.0 a introdus cuvintele cheie asincrone și await, care au oferit un suport mai bun pentru concurență la nivel de limbă.

ASINCRON este folosit pentru a marca metodele asincrone:
Cuvântul cheie async este un cuvânt cheie contextual și va fi tratat ca un cuvânt cheie doar la modificarea unei metode și a unui Lambda, fiind tratat ca un identificator în alte zone.
Cuvântul cheie asincron poate marca metodele statice, dar nu și punctele de intrare (metode Main()).
Valoarea de returnare a metodei etichetate cu asincronă trebuie să fie <TResult>Task, Task sau void.
await este folosit pentru a aștepta rezultatul metodei asincrone:
Cuvântul cheie await este, de asemenea, un cuvânt cheie contextual și este considerat un cuvânt cheie doar în metoda etichetată asincronă.
Cuvântul cheie await poate fi folosit înaintea metodei asincrone și Task, and <TResult>Task, pentru a aștepta sfârșitul execuției asincrone.
O structură simplă de metodă asincronă este următoarea:
Nu este vorba că metoda este marcată cu cuvântul-cheie asincron, ci este o metodă asincronă, iar instrucțiunile care apar direct în interiorul metodei asincrone sunt de asemenea executate sincronConținutul executat asincron trebuie executat folosind clasa Task
De fapt, o metodă asincronă care nu conține nicio instrucțiune await va fi executată sincron, moment în care compilatorul va emite un avertisment.

Exemplu simplu, folosind async/await pentru a genera conținut simultan pe ecran:

Ieșire: (Mono 4.4.0 & ArchLinux x64)

Nu este greu de observat din programul de mai sus că, în metoda async etichetată cu cuvinte cheie asincrone, codul de dinainte de a folosi await este executat sincron, iar după ce await este apelat, codul rămas rulează asincron pe un fir separat.





Precedent:fsadf{:1_2:}
Următor:RestSharp a. NET(C#) HTTP componentă helper class
Postat pe 01.11.2017 19:57:12 |
Uită-te, uită-te, uită-te
Postat pe 29.01.2019 09:37:53 |
Am căutat mult timp pe Baidu #async Task Invoke()M-am trezit în picioareMetoda de mai sus folosește cuvântul cheie async pentru a returna o metodă Invoke a clasei Task, care rezolvă și problema thread-ului; care este sensul întregii funcții?
Postat pe 29.01.2019 21:14:36 |
Este cu adevărat un lucru bun, și voi scrie un astfel de share când voi avea timp
Postat pe 15.02.2019 16:17:22 |
Rezultatul de ieșire nu poate vedea clar efectul execuției asincrone, iar intrarea asincronă ar trebui să fie simultană
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com