Szálak és szálkezelés használata
A .NET használatával olyan alkalmazásokat írhat, amelyek egyszerre több műveletet hajtanak végre. A más műveletek megtartására képes műveletek külön szálakon, úgynevezett többszálas vagy szabad szálkezelésen hajthatók végre.
A többszálas használatot használó alkalmazások jobban reagálnak a felhasználói bevitelre, mivel a felhasználói felület aktív marad, mivel a processzorigényes feladatok külön szálon hajtanak végre. A többszálas skálázható alkalmazások létrehozásakor is hasznos, mert a számítási feladatok növekedésével szálakat adhat hozzá.
Feljegyzés
Ha jobban szabályoznia kell az alkalmazás szálainak viselkedését, saját maga kezelheti a szálakat. A többszálú programozás azonban jelentősen leegyszerűsíthető a System.Threading.Tasks.ParallelSystem.Threading.Tasks.Task párhuzamos LINQ (PLINQ), a névtér egyidejű gyűjteményosztályai System.Collections.Concurrent és a szálak helyett a tevékenységek fogalmán alapuló programozási modell. További információ: Párhuzamos programozás és feladat párhuzamos kódtára (TPL).
Útmutató: Új szál létrehozása és indítása
Új szálat az osztály új példányának System.Threading.Thread létrehozásával hozhat létre. Adja meg annak a metódusnak a nevét, amelyet az új szálon végre szeretne hajtani a konstruktornak. A létrehozott szál elindításához hívja meg a metódust Thread.Start . További információkért és példákért tekintse meg a Szálak létrehozása és az adatok továbbítása a kezdési időpontban című cikket és az API-referenciát Thread .
Útmutató: Szál leállítása
A szál végrehajtásának leállításához használja a következőt System.Threading.CancellationToken: . Egységes módot biztosít a szálak együttműködésre való leállítására. További információ: Lemondás felügyelt szálakban.
Előfordulhat, hogy nem lehet egy szálat együttműködő módon leállítani, mert olyan külső kódot futtat, amelyet nem kooperatív lemondásra terveztek. Ebben az esetben előfordulhat, hogy kényszerítve szeretné megszüntetni a végrehajtást. A szál végrehajtásának kényszerített leállításához .NET-keretrendszer használhatja a metódustThread.Abort. Ez a ThreadAbortException metódus egy olyan szálat hoz létre, amelyre meghívják. További információ: Szálak megsemmisítése. A Thread.Abort metódus nem támogatott a .NET Core-ban. Ha a .NET Core-ban kényszerítve kell leállítja a külső kód végrehajtását, futtassa azt a külön folyamatban, és használja a metódust Process.Kill .
A System.Threading.CancellationToken 4. .NET-keretrendszer előtt nem érhető el. Ha le szeretne állítani egy szálat a régebbi .NET-keretrendszer verziókban, használja a szálszinkronizálási technikákat a kooperatív törlés manuális implementálásához. Létrehozhatja például az illékony logikai mezőt shouldStop
, és használatával lekérheti a szál által végrehajtott kódot. További információt a C #-referencia és System.Threading.Volatilea .
Ezzel a Thread.Join módszerrel várathatja meg a hívószálat a leállított szál befejezésére.
Útmutató: Szál szüneteltetése vagy megszakítása
A metódussal Thread.Sleep egy adott ideig szüneteltetheti az aktuális szálat. A letiltott szálakat a metódus meghívásával Thread.Interrupt szakíthatja meg. További információ: Szálak szüneteltetése és megszakítása.
Szál tulajdonságai
Az alábbi táblázat néhány tulajdonságot Thread mutat be:
Tulajdonság | Leírás |
---|---|
IsAlive | Akkor adja true vissza, ha egy szál elindult, és még nem fejeződött be normál módon vagy megszakítva. |
IsBackground | Lekéri vagy beállít egy logikai értéket, amely azt jelzi, hogy egy szál háttérszál-e. A háttérszálak olyanok, mint az előtérszálak. A háttérszál azonban nem akadályozza meg a folyamat leállítását. Miután a folyamathoz tartozó összes előtérszál leállt, a közös nyelvi futtatókörnyezet befejezi a folyamatot úgy, hogy meghívja a metódust a Abort még élő háttérszálakra. További információ: Előtér- és háttérszálak. |
Name | Lekéri vagy beállítja egy szál nevét. Leggyakrabban az egyes szálak felderítésére használják hibakereséskor. |
Priority | Lekéri vagy beállítja ThreadPriority az operációs rendszer által a szálütemezés rangsorolására használt értéket. További információ: Ütemezési szálak és hivatkozás ThreadPriority . |
ThreadState | Lekéri a ThreadState szál aktuális állapotát tartalmazó értéket. |