Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 29278|Válasz: 2

[Forrás] .net/c# Thread thread Suspend and Resume elavult megoldások

[Linket másol]
Közzétéve 2018. 05. 17. 9:36:10 | | | |
A Thread.Suspend leépült.  Kérjük, használjon más osztályokat a System.Threadingben, mint például Monitor, Mutex, Event és Semaphore, hogy szinkronizálják a szálakat vagy védjék az erőforrásokat.  A hiperlink bejelentkezés látható.
A Thread.Resume lejáratott.  Kérjük, használjon más osztályokat a System.Threadingben, mint például Monitor, Mutex, Event és Semaphore, hogy szinkronizálják a szálakat vagy védjék az erőforrásokat.  A hiperlink bejelentkezés látható.
Ha a téma szünetet akar tartani vagy folytatni, én már használtam a két módszert, a Felfüggesztést és az Resume-t, és ezeket a módszereket használom a thread működtetéséhez, ami valójában problémás, és akkor nem érdekelt, szóval vegyük ki ma, és tanulmányozzuk!

Mi a probléma azzal, ha a fenti két módszert használjuk a szálak felfüggesztésére és folytatására?

Például, ha a szál felfüggesztésére hívjuk a Felfüggesztés metódust, majd azonnal a Folytatás metódut, hogy folytassa a felfüggesztett szálat, akkor probléma adódhat.

Mert miután a Felfüggesztés metódut hívod a szál felfüggesztésére, a szál nem feltétlenül szüntethető meg azonnal, itt feldolgozási időbe telik, ekkor azonnal behívod az Resume metódudot, hogy folytassa a felfüggesztett szálat, és a program azonnal lefagy!

A Microsoft magyarázata:


Ne használd a Suspend és Resume metódusokat a szál aktivitásának szinkronizálására. Van mód arra, hogy megtudd, mi a kód, amikor megállítod a szál végrehajtását? Ha biztonsági jogosultság-értékelés közben zárol, az AppDomainben felfüggesztett szál más szálai is blokkolhatók. Ha az osztálykonstruktor végrehajtása közben felfüggeszted az AppDomain többi szálát, az osztály használatára tett kísérletek blokkolódnak. A patthelyzet könnyen előfordulhat.

//
        Összefoglalás:
        Folytasd a felfüggesztett szálat.
        //
        Anomália:
        T:System.Threading.ThreadStateException:
        A szál nincs elindítva, halott, vagy nincs függőben lévő állapotban.
        //
        T:System.Security.SecurityException:
        A hívónak nincs megfelelő System.Security.Permissions.SecurityPermission fájlja.
        [Elavult ("Thread.Resume elavult.  Kérjük, használjon más osztályokat a System.Threadingben, mint például Monitor, Mutex, Event és Semaphore, hogy szinkronizálják a szálakat vagy védjék az erőforrásokat.  A hiperlink bejelentkezés látható.", hamis)]
        [SecuritySafeKritikus]
        public void Resume();

Hogyan lehet megoldani ezt a problémát?



ManualResetEvent osztály

Értesíts egy vagy több várakozó szálat egy eseményről. Az ilyen típusok nem öröklődhetnek.


A tesztkód a következő:








Előző:C# szöveges üzeneteket küld mobiltelefonokra
Következő:Az SQL eltávolítja a tereket az adatokból
 Háziúr| Közzétéve 2018. 05. 17. 21:14:51 |
_event. Set(); a szál folytatása
_event. Reset(); a szál felfüggesztése
 Háziúr| Közzétéve 2018. 05. 29. 14:58:49 |
Ha megkapod a jelenlegi szál azonosítóját, használd a következőket:

Thread.CurrentThread.ManagedThreadId.ToString() (ajánlott)
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com