J'ai une classe wrapper socket qui envoie et reçoit des messages avec un serveur (en particulier des commandes, des réponses et des notifications). J'ai aussi une classe consommatrice qui sérialise les commandes en texte à envoyer à travers le wrapper. Mon problème est que quand une commande est envoyée, je dois attendre jusqu'à ce que je reçoive un message avec un en-tête particulier. Lorsque je fais cela, la classe consommatrice se verrouille lorsque j'utilise ManualResetEvent.WaitOne qui est défini par ma méthode de réception. La raison pour laquelle c'est un problème lorsque ma classe consommatrice se verrouille est qu'un autre message peut être reçu entre temps et je ne peux pas le traiter. Est-il possible de verrouiller un objet spécifique afin que ma classe puisse toujours répondre à d'autres événements?C# Blocage des communications par socket asynchrone
méthode Send:
_waitingCommands.Enqueue(command);
String commandText = command.ToString();
_socket.Send(commandText);
méthode receive:
if (response.Header.Type == Messages.MessageType.Response)
{
if (command.Response == null)
command.Response = response;
_waitingCommands.Dequeue();
command.Finished.Set();
}