Razred nalog
Razred Task je asinhrona apstrakcija operacij, ki je na voljo po .NET 4.0, s polno potjo do System.Threading.Tasks.Task.
Razred Task se uporablja za predstavitev asinhronih operacij brez vrnjene vrednosti, za asinhrone operacije z vrnjenimi vrednostmi pa je treba uporabiti podrazred Task razreda Task<TResult>. Naloge, ki jih ustvari razred Naloga, se dodajo v bazen niti.
Glavni <TResult>konstruktorji razreda Naloga/Naloga so naslednji:
Ko je naloga ustvarjena, jo lahko začnemo z metodo Start():
V dejanskem razvoju se za ustvarjanje in začetek novih nalog pogosteje uporabljata statična metoda Run() razreda Task Factory ali članica StartNew() razreda TaskFactory.
Nekatere pogoste metode v razredu Naloge:
async/await ključna beseda
C# 5.0 je uvedel async in await ključne besede, kar je omogočilo boljšo podporo sočasnosti na jezikovni ravni.
Async se uporablja za označevanje asinhronih metod: Asinhrona ključna beseda je kontekstualna ključna beseda in bo obravnavana le kot ključna beseda pri spreminjanju metode in Lambda, v drugih področjih pa kot identifikator. Asinhrona ključna beseda lahko označi statične metode, ne pa vstopnih točk (Main() metode).
Vrnjena vrednost metode, označene z asynchron, mora biti <TResult>ena od Task, Task, ali void. await se uporablja za čakanje na rezultat asinhrone metode:
Ključna beseda 'čakaj' je prav tako kontekstualna ključna beseda in se šteje le za ključno besedo v asinhroni metodi označevanja. Ključna beseda await se lahko uporabi pred asinhrono metodo, Task, in <TResult>Task, za čakanje na konec asinhrone izvedbe naloge. Preprosta asinhrona struktura metode je naslednja:
Metoda ni označena z asinhrono ključno besedo, gre za asinhrono metodo, in stavki, ki se pojavijo neposredno znotraj asinhrone metode, se prav tako izvajajo sinhrono,Vsebino, ki se izvaja asinhrono, je treba izvajati z uporabo razreda Task。 Pravzaprav se bo sinhrono izvedela asinhrona metoda, ki ne vsebuje nobenih ukazov čakanja, pri čemer bo prevajalnik dal opozorilo.
Preprost primer, uporaba async/await za sočasni prikaz vsebine na zaslonu:
Izhod: (Mono 4.4.0 & ArchLinux x64)
Iz zgornjega programa ni težko videti, da se pri asinhroni metodi z oznako asynchrone ključne besede koda pred uporabo await izvaja sinhrono, po klicu await pa preostala koda teče asinhrono na ločeni niti.
|