我正在尝试使用可以发送命令并接收响应的设备设置一些通信。但是,我确实想确保我控制超时标志以防止无限期的等待时间。
我做了这样的事情:
private volatile EventWaitHandle _signal;
public void Send()
{
// Do something
_signal.WaitOne(30000);
// Continue with something else
_signal.Reset();
}
public void Receive()
{
_signal.Set();
}
我的问题是,如果我有多个线程(本例中假设为 2)可以访问 Send 方法和以下场景:
线程 A:
// Sends a "listen" command, but no response is received
Send();
线程 B:
// Sends a "cancel" command and response (success) is received
Send();
我得到不一致的结果,即当我得到第二个命令(取消)的响应时,有时两个线程都会继续,我可以理解,但有时第一个线程会达到 30000 毫秒超时 - 我无法解释。
关于我缺少什么和/或做错了什么的任何建议?