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 sincron,Conț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.
|