Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 29278|Odpoveď: 2

[Zdroj] .net/c# Thread Suspend and Resume zastarané riešenia

[Kopírovať odkaz]
Zverejnené 17. 5. 2018 9:36:10 | | | |
Thread.Suspend bol zrušený.  Prosím, používajte iné triedy v System.Threading, ako sú Monitor, Mutex, Event a Semaphore, na synchronizáciu vlákien alebo ochranu zdrojov.  Prihlásenie na hypertextový odkaz je viditeľné.
Vlákno. Životopis bol zrušený.  Prosím, používajte iné triedy v System.Threading, ako sú Monitor, Mutex, Event a Semaphore, na synchronizáciu vlákien alebo ochranu zdrojov.  Prihlásenie na hypertextový odkaz je viditeľné.
Ak chce vlákno pozastaviť alebo pokračovať, už som použil obe metódy Suspend a Resume a tieto dve metódy používam na ovládanie vlákna, čo je vlastne problém, a vtedy mi to nevadilo, tak ho dnes vytiahnime a preskúmajme!

Aký je problém s použitím vyššie uvedených dvoch metód na pozastavenie a pokračovanie vo vláknach?

Napríklad, ak zavoláme metódu Suspend na pozastavenie vlákna a potom okamžite zavoláme metódu Resume na pokračovanie pozastaveného vlákna, môže nastať problém.

Pretože po zavolaní metódy Suspend na pozastavenie vlákna nemusí byť vlákno pozastavené okamžite, tu to trvá čas spracovania, v tomto momente okamžite zavoláte metódu Resume na pokračovanie pozastaveného vlákna a program sa okamžite zasekne!

Microsoft vysvetľuje:


Nepoužívajte metódy Suspend a Resume na synchronizáciu aktivity vlákien. Existuje spôsob, ako zistiť, čo je kód, keď pozastavíte vykonávanie vlákna? Ak počas hodnotenia bezpečnostných práv držíte zámok, ostatné vlákna vo vašom pozastavenom vlákne v AppDomain môžu byť zablokované. Ak pri vykonávaní konštruktora triedy pozastavíte iné vlákna v AppDomain, pokusy o použitie triedy sú zablokované. Patové situácie sa môžu ľahko vyskytnúť.

//
        Súhrn:
        Pokračujte v pozastavenej diskusii.
        //
        Anomália:
        T:System.Threading.ThreadStateException:
        Vlákno nie je spustené, mŕtve ani nie je v stave čakania.
        //
        T:System.Security.SecurityException:
        Volajúci nemá správne System.Security.Permissions.SecurityPermission.
        [Zastarané("Vlákno. Životopis bol zastaraný.  Prosím, používajte iné triedy v System.Threading, ako sú Monitor, Mutex, Event a Semaphore, na synchronizáciu vlákien alebo ochranu zdrojov.  Prihlásenie na hypertextový odkaz je viditeľné.", nepravda)]
        [BezpečnosťBezpečnéKritické]
        verejná prázdnota Resume();

Ako tento problém vyriešiť?



Trieda ManualResetEvent

Upozornite jednu alebo viac čakajúcich vlákien, že nastala udalosť. Takéto typy sa nedajú dediť.


Testovací kód je nasledovný:








Predchádzajúci:C# posiela textové správy na mobilné telefóny
Budúci:SQL odstraňuje medzery z dát
 Prenajímateľ| Zverejnené 17. 5. 2018 21:14:51 |
_event. set(); je pokračovať v diskusii
_event. Reset(); je pozastavenie vlákna
 Prenajímateľ| Zverejnené 29. 5. 2018 14:58:49 |
Ak získate ID aktuálneho vlákna, použite :

Thread.CurrentThread.ManagedThreadId.ToString() (odporúčané)
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com