|
|
Julkaistu 31.5.2018 14.59.47
|
|
|
|

Keskustellaan ensin ManualResetEventistä, ja lisään keskustelun aikana AutoResetEvent-sisältöä vertaillakseni:
ManualResetEvent voi estää yhden tai useamman säikeen, kunnes vastaanotetaan signaali, joka kehottaa ManualResetEventiä lopettamaan nykyisen säikeen estämisen.
Tietoa ManualResetEventistä
Kuvittele, että ManualResetEvent-oliolla on Boole-tyyppinen ominaisuus, IsRelease, joka voi hallita, estääkö nykyinen säie. Voimme asettaa tämän ominaisuuden alustuksen yhteydessä, kuten ManualResetEvent event=new ManualResetEvent(false); Tämä tarkoittaa, että oletusominaisuus on estää nykyinen säie.
Koodiesimerkki:
Huomaa tärkeä ero ManualResetEventin ja AutoResetEventin välillä tässä:
Manuaali lähettää varmasti signaalin sekä säikeelle 1 että säie 2:lle,Auto lähettää signaalin vain yhdelle niistä satunnaisesti.
Miksi toista kutsutaan manuaaliksi ja toista automaattiseksi? Uskon, että tämä on monien kysymys, ja nyt tarkastelemme sitä.
Vain now_manualResetEvent. Set(); Uskon, että kaikki ymmärtävät tämän lauseen, jota voidaan pitää IsReleasen ominaisuuden asettamisena todeksi
_manualResetEvent.WaitOne(); Säie 1 ei enää estä signaalin vastaanottamisen jälkeen. IsReleasen arvo näkyy koko sen jälkeisen prosessin ajan.Jos
Jos haluat palauttaa IsRelease-arvon vääräksi, sinun täytyy kutsua _manualResetEvent.Reset()-menetelmää uudelleen.
Jos se on _autoResetEvent.set(), niin _autoResetEvent.WaitOne() asettaa automaattisesti IsRelease-arvon vääräksi.
Siksi toinen on automaattinen ja toinen manuaalinen.
Testikoodi:
|
Edellinen:. .NETin nopein OOM-objektikartoituskomponentti, Tiny Mapper, projektikäytännössäSeuraava:C# DEBUG debug-tiedon tulostus ja tulostus yksityiskohtainen selitys
|