Thread.Suspend on aegunud. Palun kasutage System.Threadingus teisi klasse, nagu Monitor, Mutex, Event ja Semaphore, et sünkroniseerida Threade või kaitsta ressursse. Hüperlingi sisselogimine on nähtav. Thread.Resume on aegunud. Palun kasutage System.Threadingus teisi klasse, nagu Monitor, Mutex, Event ja Semaphore, et sünkroniseerida Threade või kaitsta ressursse. Hüperlingi sisselogimine on nähtav. Kui teema tahab pausile panna või jätkata, olen varem kasutanud kahte meetodit – Suspend ja Resume – ning kasutan neid kahte meetodit lõime haldamiseks, mis on tegelikult probleemne ja mulle tol ajal see ei meeldinud, nii et võtame selle välja ja uurime seda täna!
Mis on probleem ülaltoodud kahe meetodi kasutamisega lõimede peatamiseks ja jätkamiseks?
Näiteks, kui kutsume Suspend meetodi lõime peatamiseks ja seejärel kohe kutsume Resume meetodi, et jätkata peatatud lõime, võib tekkida probleem.
Sest pärast Suspend meetodi kutsumist lõime peatamiseks ei pruugi lõim kohe peatada – siin võtab see töötlemisaega, sel hetkel kutsud kohe Resume meetodi peatatud lõime jätkamiseks ja programm hangub kohe!
Microsofti selgitus on:
Ära kasuta Suspend ja Resume meetodeid lõime tegevuse sünkroniseerimiseks. Kas on võimalik teada, mis kood on, kui lõime täitmise peatada? Kui hoiad lukku turvaõiguste hindamise ajal, võivad teised lõimed sinu peatatud lõimes AppDomainis olla blokeeritud. Kui peatad teised lõimed AppDomainis klassi konstruktori käivitamisel, blokeeritakse katsed klassi kasutada. Ummikseisud võivad kergesti tekkida.
// Kokkuvõte: Jätka peatatud lõimega. // Anomaalia: T:System.Threading.ThreadStateException: Lõim ei ole käivitatud, surnud ega ootel olekus. // T:System.SecurityException: Helistajal puudub õige System.Security.Permissions.SecurityPermission. [Aegunud ("Thread.CV on aegunud. Palun kasutage System.Threadingus teisi klasse, nagu Monitor, Mutex, Event ja Semaphore, et sünkroniseerida Threade või kaitsta ressursse. Hüperlingi sisselogimine on nähtav.", vale)] [TurvalisusTurvaKriitiline] avalik tühine CV(); Kuidas seda probleemi lahendada?
ManualResetEvent klass
Teavita üht või mitut ootavat lõime, et sündmus on toimunud. Selliseid tüüpe ei saa pärida.
Testkood on järgmine:
|