诚然,这是一个不寻常的问题。我绝不会建议在典型的 .NET 开发中用 ManualResetEvent 替换布尔值。在这种情况下,我已经需要一个 ManualResetEvent 来指示与另一个线程的连接状态;鉴于此,我想到使用具有相同语义含义的布尔值是多余的。
好的,细节:我有一个工作线程应该在以下条件为真时处理消息:
- “客户端”已连接
- “收件人”已连接
“客户端”和“接收者”连接是其他线程正在监视的 TCP 套接字;当任一连接状态发生变化时,相应的 WaitHandle 将被设置(Connected)或重置(Disconnected)。
最初,我有一个布尔值表示连接状态(用于 UI)。现在我正在使用 WaitHandles 向工作线程发出信号,完全消除布尔状态变量并只使用 WaitHandles 似乎是有利的。
waitEvent.WaitOne( 0 )
返回句柄的状态而不阻塞,使其在功能上与测试布尔值相同(具有线程安全操作的附加优势)。
所以,考虑到我已经准备使用 WaitHandles,而且我不喜欢将状态(相同的语义)维护到两个不同的变量中,我有什么理由不能只使用 WaitHandles 吗?我能想到的最重要的反驳论点是运行时性能:测试布尔值的时间与测试 WaitHandle 的时间;但我认为性能不会受到太大影响。
我在这里错过了什么重要的东西吗?
谢谢!