Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 29278|Răspunde: 2

[Sursă] .net/c# Thread Suspend și Resume soluții învechite

[Copiază linkul]
Postat pe 17.05.2018 09:36:10 | | | |
Thread.Suspend a fost depreciat.  Vă rugăm să folosiți alte clase în System.Threading, cum ar fi Monitor, Mutex, Event și Semaphore, pentru a sincroniza firele de discuție sau a proteja resursele.  Autentificarea cu hyperlink este vizibilă.
Thread.Resume a fost deprevăzut.  Vă rugăm să folosiți alte clase în System.Threading, cum ar fi Monitor, Mutex, Event și Semaphore, pentru a sincroniza firele de discuție sau a proteja resursele.  Autentificarea cu hyperlink este vizibilă.
Dacă thread-ul vrea să se oprească sau să continue, am folosit cele două metode Suspend și Resume înainte, și folosesc aceste două metode pentru a opera firul, ceea ce este de fapt problematic, iar atunci nu m-a interesat, așa că hai să-l scoatem și să-l studiem azi!

Care este problema cu folosirea celor două metode de mai sus pentru a suspenda și continua thread-urile?

De exemplu, dacă apelăm metoda Suspend pentru a suspenda firul, apoi apelăm imediat metoda Resume pentru a continua firul suspendat, atunci poate apărea o problemă.

Pentru că, după ce chemi metoda Suspend pentru a suspenda firul, firul poate să nu fie suspendat imediat, aici durează timp de procesare, iar în acest moment, apelezi imediat metoda Resume pentru a continua firul suspendat, iar programul se blochează imediat!

Explicația Microsoft este:


Nu folosiți metodele Suspend și Resume pentru a sincroniza activitatea firului de discuție. Există vreo modalitate de a ști ce este codul atunci când pui pauză executarea firului de discuție? Dacă țineți un blocaj în timpul evaluării privilegiilor de securitate, alte fire din firul suspendat în AppDomain pot fi blocate. Dacă suspendi alte fire de execuție în AppDomain când execuți constructorul de clasă, încercările de a folosi clasa sunt blocate. Blocajele pot apărea ușor.

//
        Rezumat:
        Continuă firul suspendat.
        //
        Anomalie:
        T:System.Threading.ThreadStateException:
        Thread-ul nu este pornit, nu este mort sau nu este într-o stare de așteptare.
        //
        T:System.Security.SecurityException:
        Apelantul nu are sistemul corespunzător.Permisiuni.Securitate.Permisiune.
        [Obsolete("Thread.Resume a fost deprevăzut.  Vă rugăm să folosiți alte clase în System.Threading, cum ar fi Monitor, Mutex, Event și Semaphore, pentru a sincroniza firele de discuție sau a proteja resursele.  Autentificarea cu hyperlink este vizibilă.", fals)]
        [SecuritySafeCritical]
        public void Resume();

Cum pot rezolva această problemă?



Clasa ManualResetEvent

Notificați unul sau mai multe fire de discuție în așteptare că a avut loc un eveniment. Astfel de tipuri nu pot fi moștenite.


Codul testului este următorul:








Precedent:C# trimite mesaje text către telefoanele mobile
Următor:SQL elimină spațiile din date
 Proprietarul| Postat pe 17.05.2018 21:14:51 |
_event. Set(); este să continue firul
_event. Reset(); este să suspendi firul
 Proprietarul| Postat pe 29.05.2018 14:58:49 |
Dacă obții ID-ul firului curent, folosește:

Thread.CurrentThread.ManagedThreadId.ToString() (recomandat)
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com