Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 29278|Odgovoriti: 2

[Vir] .net/c# Thread thread Suspend and Resume zastarele rešitve

[Kopiraj povezavo]
Objavljeno na 17. 05. 2018 09:36:10 | | | |
Thread.Suspend je bil ukinjen.  Prosimo, uporabite druge razrede v System.Threading, kot so Monitor, Mutex, Event in Semaphore, za sinhronizacijo niti ali zaščito virov.  Prijava do hiperpovezave je vidna.
Tema.Življenjepis je bil zastarel.  Prosimo, uporabite druge razrede v System.Threading, kot so Monitor, Mutex, Event in Semaphore, za sinhronizacijo niti ali zaščito virov.  Prijava do hiperpovezave je vidna.
Če se nit želi ustaviti ali nadaljevati, sem že uporabljal obe metodi, Suspend in Resume, in uporabljam ti dve metodi za upravljanje niti, kar je dejansko problematično, in takrat me to ni zanimalo, zato jo danes vzemimo ven in preučimo!

Kakšen je problem z uporabo zgoraj omenjenih dveh metod za začasno prekinitev in nadaljevanje tem?

Na primer, če pokličemo metodo Suspend za začasno prekinitev niti, nato pa takoj pokličemo metodo Resume za nadaljevanje suspendirane niti, se lahko pojavi težava.

Ker po tem, ko pokličete metodo Suspend za začasno prekinitev niti, nit morda ne bo takoj suspendirana, tukaj traja obdelava; takrat takoj pokličete metodo Resume za nadaljevanje suspendirane niti, program pa se takoj zatakne!

Microsoftova razlaga je:


Ne uporabljajte metod Suspend in Resume za sinhronizacijo aktivnosti niti. Ali obstaja način, da veš, kaj je koda, ko ustaviš izvajanje niti? Če med ocenjevanjem varnostnih privilegijev držite zaklep, so lahko blokirane druge niti v vaši suspendirani niti v AppDomain. Če med izvajanjem konstruktorja razreda začasno suspendirate druge niti v AppDomain, so poskusi uporabe razreda blokirani. Zastoji se lahko zlahka zgodijo.

//
        Povzetek:
        Nadaljujte z začasno prekinjeno temo.
        //
        Anomalija:
        T:System.Threading.ThreadStateException:
        Nit ni začeta, mrtva ali ni v čakajočem stanju.
        //
        T:System.Security.SecurityException:
        Klicatelj nima ustreznega System.Security.Permissions.SecurityPermission.
        [Zastarelo("Nit. Življenjepis je zastarel.  Prosimo, uporabite druge razrede v System.Threading, kot so Monitor, Mutex, Event in Semaphore, za sinhronizacijo niti ali zaščito virov.  Prijava do hiperpovezave je vidna.", napačno)]
        [VarnostVarnoKritično]
        javna praznina Življenjepis();

Kako rešiti ta problem?



Razred ManualResetEvent

Obvestite eno ali več čakalnih niti, da se je zgodil dogodek. Takšnih vrst ni mogoče dedovati.


Testna koda je naslednja:








Prejšnji:C# pošilja SMS sporočila na mobilne telefone
Naslednji:SQL odstrani presledke iz podatkov
 Najemodajalec| Objavljeno na 17. 05. 2018 21:14:51 |
_event. set(); je nadaljevanje teme
_event. Reset(); je začasno suspendiranje niti
 Najemodajalec| Objavljeno na 29. 05. 2018 14:58:49 |
Če dobiš ID trenutne niti, uporabi:

Thread.CurrentThread.ManagedThreadId.ToString() (priporočeno)
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com