Différence entre NetworkStream.Read() et NetworkStream.BeginRead()?

J'ai besoin de lire de NetworkStream qui permettrait d'envoyer des données au hasard et la taille des paquets de données de garder aussi divers. Je me suis mise en œuvre d'une application multi-thread où chaque thread a son propre flux de la lecture. Si il n'y a pas de données sur le flux, la demande devrait continuer à attendre pour les données arrivent. Cependant, si le serveur d'envoi de données et a mis fin à la session, il doit la quitter.

Au début, j'avais utilisé la Read méthode pour obtenir les données à partir du flux, mais il sert à bloquer le thread et attendre jusqu'à ce que les données apparus sur le flux.

La documentation MSDN suggère,

Si aucune donnée n'est disponible pour la lecture,
la méthode Read retourne 0. Si l'
hôte distant arrête la connexion,
et l'ensemble des données disponibles a été
reçu, la méthode de Lecture complète
immédiatement et de retourner zéro octets.

Mais dans mon cas, je n'ai jamais eu le Read méthode retourne 0 et se terminer normalement. Il attends indéfiniment.

Dans mon enquête, je suis tombé sur BeginRead qui regarde le stream et invoque une méthode de rappel de manière asynchrone, dès qu'il reçoit les données. J'ai essayé de regarder pour les différentes implémentations à l'aide de cette approche, cependant, j'ai été incapable d'identifier quand à l'aide de BeginRead être bénéfique, par opposition à Read.

Que je la regarde, BeginRead a juste l'avantage d'avoir l'appel asynchrone, ce qui ne serait pas bloquer le thread courant. Mais dans mon application, j'ai déjà un thread séparé pour lire et traiter les données de flux, de sorte que ne ferait pas beaucoup de différence pour moi.

  • Quelqu'un peut s'il vous plaît aidez-moi à comprendre l'Attente et le mécanisme de Sortie pour
    BeginRead et comment est-il différent de Read?

  • Quelle serait la meilleure façon de mettre en œuvre les fonctionnalités souhaitées?

Êtes-vous sûr que le côté distant est bien la fermeture de la connexion? Je n'ai jamais eu un problème avec Read ne pas revenir. Votre approche contraire semble être la bonne direction.
Eh bien, honnêtement, je ne peux pas dire que pour vous. Son un service tiers, que nous lisons. Elles ont précisé que la fermeture horaires et nous supposons que cela se passe comme mentionné. Je veux juste vérifier et revérifier à mon extrémité avant de soulever un drapeau.

OriginalL'auteur Danish Khan | 2010-12-08