|
|
Opslået på 31/05/2018 14.59.47
|
|
|
|

Lad os først diskutere ManualResetEvent, og jeg vil indsætte noget AutoResetEvent-indhold under diskussionen for at sammenligne:
ManualResetEvent kan blokere en eller flere tråde, indtil et signal modtages om at stoppe blokeringen af den aktuelle tråd til ManualResetEvent.
Information om ManualResetEvent
Forestil dig, at objektet ManualResetEvent har en boolesk typeegenskab, IsRelease, til at styre, om den aktuelle tråd skal blokeres. Vi kan sætte denne egenskab ved initialisering, såsom ManualResetEvent event=new ManualResetEvent(false); Dette indikerer, at standardegenskaben er at blokere den aktuelle tråd.
Kodeeksempel:
Bemærk en vigtig forskel mellem ManualResetEvent og AutoResetEvent her:
Manuelt vil helt sikkert sende et signal til både tråd 1 og tråd 2.Auto sender kun et signal til én af dem tilfældigt.
Hvorfor hedder den ene manuel og den anden auto? Jeg tror, det er et spørgsmål, mange har, og nu vil vi se nærmere på det.
Bare now_manualResetEvent. Set(); Jeg tror, alle forstår denne sætning, som kan betragtes som at sætte IsRelease-egenskaben til sand
_manualResetEvent.WaitOne(); Blokerer ikke længere tråd 1 efter at have modtaget et signal. Værdien af IsRelease gælder gennem hele processen derefter.Hvis
Hvis du vil returnere værdien af IsRelease til false, skal du igen kalde _manualResetEvent.Reset()-metoden.
Hvis det er _autoResetEvent.set(), vil _autoResetEvent.WaitOne() automatisk sætte værdien af IsRelease til false.
Derfor kaldes den ene auto, og den anden er manuel.
Testkode:
|
Tidligere:. .NETs hurtigste OOM-objektmappingkomponent, Tiny Mapper, i projektpraksisNæste:C# DEBUG, debug-information, udskrivning og output detaljeret forklaring
|