ManualResetEvent
и ManualResetEventSlim
оба разработаны так, чтобы они оставались сигнальными после вызова.Как правило, это для сценария, совершенно отличного от AutoResetEvent
.
AutoResetEvent
, сразу после использования сразу возвращается в состояние без сигнала, что обычно используется для другого набора сценариев.Из документации AutoResetEvents:
Обычно этот класс используется, когда потокам необходим эксклюзивный доступ к ресурсу.
ManualResetEvent
(и Slim
) обычно используются,однако для сценария, в котором:
это сообщение касается задачи, которую один поток должен завершить, прежде чем другие потоки смогут продолжить.
Поскольку AutoResetEvent
чаще всего используется вВ сценариях, где есть несколько потоков, совместно использующих ресурс, время ожидания обычно не будет очень коротким.ManualResetEventSlim
, однако, действительно предназначен только для случаев, когда вы заранее знаете, что время ожидания очень короткое.Если ваше время ожидания не будет очень коротким, тогда вы должны использовать ManualResetEvent
.Подробности смотрите в документации по разнице между MRE и MRES .
Когда время ожидания больше (что было бы нормальным сценарием с AutoResetEvent
), «тонкая» версияна самом деле хуже, так как он возвращается к использованию дескриптора ожидания.