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.

Lásd még