我有一个SocketWrapper类,它用服务器发送和接收消息(特别是命令、响应和通知)。我还有一个消费类,它将命令序列化为文本以通过包装器发送。我的问题是,当一个命令被发送时,我需要等待,直到我得到一个带有特定头的消息。当我这样做时,消费类会锁定我正在使用的ManualReseteEvent.WaitOne,它是由我的接收方法设置的。使用类锁时出现问题的原因是在此期间可能会收到另一条消息,而我无法处理它。是否有任何方法可以锁定特定对象,以便我的类仍能响应其他事件?
发送方法:
_waitingCommands.Enqueue(command);
String commandText = command.ToString();
_socket.Send(commandText);
接收方法:
if (response.Header.Type == Messages.MessageType.Response)
{
if (command.Response == null)
command.Response = response;
_waitingCommands.Dequeue();
command.Finished.Set();
}