Feladatosztály
A Feladatosztály egy aszinkron műveleti absztrakció, amelyet a .NET 4.0 után biztosítottak, teljes úttal a System.Threading.Tasks.Task oldalra.
A Feladatosztályt az aszinkron műveletek ábrázolására használják, amelyekben nincs visszatérési érték, míg aszinkron műveletek esetén a Feladat osztály Feladat alosztályát kell használni<TResult>. A Feladatosztály által létrehozott feladatokat hozzáadják a szálkészlethez.
<TResult>A Feladat/Feladat osztály fő konstruktorai a következők:
Miután létrehozták, a feladatot a Start() módszerrel lehet elindítani:
A tényleges fejlesztés során a Task osztály statikus Run() módszerét, vagy a gyári osztály StartNew() tag metódusát használják új feladatok létrehozására és indítására.
Néhány gyakori módszer a Feladat osztályban:
async/await kulcsszavas
A C# 5.0 bevezette az asszinkron és várakozó kulcsszavakat, amelyek jobb támogatást nyújtottak a nyelvi szintű párhuzamossághoz.
Az aszinkron módszerek jelölésére használják: Az aszinkron kulcsszava, amely kontextuális kulcsszó, és csak egy metódus és Lambda módosításakor kezelik kulcsszóként, más területeken pedig azonosítóként kezelik. Az aszinkron kulcsszavaval statikus metódusokat jelölhet, de nem belépő pontokat (Main() metódusok.
Az aszinkron címkével jelölt metódus visszaküldési értéke <TResult>Feladat, Feladat vagy void értéknek kell lennie. Az await segítségével várják az aszinkron módszer eredményét:
Az await kulcsszó szintén kontextuális kulcsszó, és csak az aszinkron címkézett módszerben számít kulcsszónak. Az await kulcsszó az aszinkron metódus és a Feladat, valamint <TResult>a Feladat előtt használható, hogy megvárjuk az aszinkron feladat végrehajtásának végét. Egy egyszerű aszinkron módszerstruktúra a következő:
Nem arról van szó, hogy a metódus aszinkron kulcsszóval van jelölve, hanem aszinkron metódus, és az aszinkron metódusban megjelenő utasítások is szinkronon végrehajtásra kerülnek,Az aszinkron módon végrehajtott tartalmat a Task osztály segítségével kell végrehajtani。 Valójában egy olyan aszinkron metódus, amely nem tartalmaz await utasításokat, szinkron módon fut le, ekkor a fordító figyelmeztetést ad.
Egyszerű példa: aszinkron/várakozás használata a tartalom egyidejű kimenetére a képernyőn:
Kimenet: (Mono 4.4.0 && ArchLinux x64)
Nem nehéz látni a fenti programból, hogy az aszinkron kulcsszava, aszinkron metódus címkézve a kód az await használata előtt szinkron módon történik, és az await hívása után a megmaradt kód aszinkron fut egy külön szálon.
|