C#异步套接字通信阻塞
我有一个套接字包装类,它通过服务器发送和接收消息(特别是命令、响应和通知)。我还有一个消费类,它将命令序列化为文本,通过包装器发送。我的问题是,当一个命令被发送时,我需要等待,直到我收到一个带有特定头的消息。当我执行此操作时,消费类在我使用接收方法设置的ManualResetEvent.WaitOne时锁定。当我的消费类锁定时出现问题的原因是,在此期间可能会收到另一条消息,而我无法处理它。是否有任何方法可以锁定特定对象,以便我的类仍然可以响应其他事件 发送方法:C#异步套接字通信阻塞,c#,sockets,C#,Sockets,我有一个套接字包装类,它通过服务器发送和接收消息(特别是命令、响应和通知)。我还有一个消费类,它将命令序列化为文本,通过包装器发送。我的问题是,当一个命令被发送时,我需要等待,直到我收到一个带有特定头的消息。当我执行此操作时,消费类在我使用接收方法设置的ManualResetEvent.WaitOne时锁定。当我的消费类锁定时出现问题的原因是,在此期间可能会收到另一条消息,而我无法处理它。是否有任何方法可以锁定特定对象,以便我的类仍然可以响应其他事件 发送方法: _waitingComm
_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();
}
使用socket.BeginSend和socket.BeginReceive。这些将分离出单独的线程,允许主线程继续处理。发送或接收数据后,连接到BeginSend/BeginReceive方法的方法将按逻辑顺序启动