Unterschied zwischen NetworkStream.Read() und NetworkStream.BeginRead()?

Muss ich Lesen von NetworkStream würde Daten senden nach dem Zufallsprinzip und die Größe von Datenpaketen halten Sie auch unterschiedliche. Ich bin Implementierung einer multi-threaded-Anwendung, wo jeder thread seinen eigenen stream zum Lesen aus. Wenn es keine Daten auf den stream, muss die Anwendung warten, bis die Daten ankommen. Allerdings, wenn der server das senden der Daten und der Beendigung der Sitzung, dann sollte es beenden.

Zunächst hatte ich nutzte die Read Methode, um die Daten aus dem stream, aber es verwendet, um den thread zu blockieren und warten, bis die Daten erschienen auf dem stream.

In der Dokumentation auf der MSDN-Website schlägt vor,

Wenn keine Daten zum Lesen verfügbar sind,
die Read-Methode gibt 0 zurück. Wenn die
remote-host beendet die Verbindung,
alle verfügbaren Daten wurden
empfangen werden, wird die Read-Methode abgeschlossen ist
und sofort wieder von null bytes.

Aber in meinem Fall, ich habe noch nie die Read Methode 0 zurück und würdevoll beenden. Es wartet einfach nur auf unbestimmte Zeit.

In weitere nachforschungen stieß ich auf BeginRead die Uhren des Streams und ruft eine callback-Methode asynchron, sobald er die Daten empfängt. Ich habe versucht, zu suchen für verschiedene Implementierungen, mit diesem Ansatz als gut, allerdings war ich nicht in der Lage zu erkennen, Wann wäre mit BeginRead vorteilhaft sein, im Gegensatz zu Read.

Wie ich es sehe BeginRead hat nur den Vorteil, dass die asynchronen Aufruf, die blockiert den aktuellen thread. Aber in meiner Anwendung habe ich bereits einen separaten thread zu Lesen und zu verarbeiten die Daten aus dem stream, so dass würde nicht viel Unterschied für mich.

  • Kann jemand bitte helfen Sie mir zu verstehen, die Warten und Exit-Mechanismus für die
    BeginRead und wie unterscheidet es sich von Read?

  • Was wäre die beste Art der Umsetzung der gewünschten Funktionalität?

  • Sind Sie sicher, dass der remote-Seite ist richtig Herunterfahren die Verbindung? Ich hatte noch nie ein problem mit Read nicht zurück. Dein Ansatz, ansonsten scheint die richtige Richtung.
  • Nun, ehrlich gesagt, ich kann nicht sagen, dass für sicher. Seine Dritte Leistung, die wir Lesen. Sie haben angegeben das shutdown-Zeiten und wir gehen davon aus, dass es so geschieht, wie erwähnt. Ich will einfach nur, um zu überprüfen, und überprüfen Sie noch einmal an mein Ende der ersten vor dem auslösen eine fahne zu Ihnen.
InformationsquelleAutor Danish Khan | 2010-12-08
Schreibe einen Kommentar