See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 29278|Vastuse: 2

[Allikas] .net/c# Lõime Peata ja jätka aegunud lahendusi

[Kopeeri link]
Postitatud 17.05.2018 09:36:10 | | | |
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:








Eelmine:C# saadab tekstisõnumeid mobiiltelefonidele
Järgmine:SQL eemaldab andmetest tühimikud
 Üürileandja| Postitatud 17.05.2018 21:14:51 |
_event. Set(); on niidi jätkamine
_event. Reset(); on lõime peatamine
 Üürileandja| Postitatud 29.05.2018 14:58:49 |
Kui saad praeguse teema ID, kasuta :

Thread.CurrentThread.ManagedThreadId.ToString() (soovitatav)
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com