我有一个套接字包装类,它使用服务器发送和接收消息(特别是命令,响应和通知)。我还有一个消费类,它将命令序列化为文本以通过包装器发送。我的问题是,当发送命令时,我需要等到我收到带有特定标头的消息。当我这样做时,消耗类锁定,因为我使用的是我的接收方法设置的ManualResetEvent.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();
}
答案 0 :(得分:0)
使用socket.BeginSend和socket.BeginReceive。这些将剥离单独的线程,这将允许您的主线程继续处理。一旦发送或接收了数据,您连接到BeginSend / BeginReceive方法的方法将按逻辑顺序触发。