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