Это, по общему признанию, необычный вопрос; Я бы никогда не рекомендовал заменять логическое значение на ManualResetEvent в типичной разработке .NET. В этом случае мне уже нужен ManualResetEvent, чтобы указать состояние соединения с другим потоком; Учитывая это, мне приходит в голову, что использование логического значения с тем же семантическим значением является излишним.
ОК, особенности: у меня есть рабочий поток, который должен обрабатывать сообщения, когда выполняются следующие условия:
- «Клиент» подключен
- «Получатель» подключен
Соединения "клиент" и "получатель" - это сокеты TCP, которые отслеживаются другими потоками; при изменении состояния подключения соответствующий WaitHandle будет установлен (подключен) или сброшен (отключен).
Первоначально у меня было логическое значение состояния соединения (для пользовательского интерфейса). Теперь, когда я использую WaitHandles для сигнализации рабочего потока, представляется целесообразным полностью исключить логические переменные состояния и просто использовать WaitHandles.
waitEvent.WaitOne( 0 )
возвращает состояние дескриптора без блокировки, что делает его функционально идентичным проверке логического значения (с дополнительным преимуществом поточно-ориентированной работы).
Итак, учитывая, что я уже собираюсь использовать WaitHandles, и мне не нравится идея сохранения состояния (одного и того же семантического значения) в двух разных переменных, есть ли причина, по которой я не могу просто использовать WaitHandles? Наиболее значимым контраргументом, который я могу придумать, является производительность во время выполнения: время для проверки логического значения и время для проверки WaitHandle; но я не думаю, что это сильно повлияет на производительность.
Я что-то здесь упускаю?
Спасибо!