So brechen Sie NetworkStream.ReadAsync ab, ohne den Stream zu schließen

Ich versuche, mit NetworkStream.ReadAsync () Daten zu lesen, kann jedoch nicht feststellen, wie ReadAsync () abgebrochen werden kann, wenn es einmal aufgerufen wurde. Für den Hintergrund wird mir der NetworkStream von einem verbundenen BluetoothClient-Objekt (aus der 32Feet.NET Bluetooth Library) bereitgestellt.

Der aktuelle Code, den ich versuche, ist unten.

int bytesRead;

while (this.continueReading)
{
    bytesRead = await this.stream.ReadAsync(this.buffer, 0, (int)this.buffer.Length);

    Console.WriteLine("Received {0} bytes", bytesRead);
}

Console.WriteLine("Receive loop has ended");

Der Code funktioniert einwandfrei beim Empfangen von Daten und stoppt die Schleife, wenn das continueReading-Flag auf false gesetzt ist und Daten empfangen werden. Solange keine Daten empfangen werden, wird die ReadAsync () -Zeile nicht überschritten. Ich kann nicht sehen, wie ich den Anruf abbrechen kann, ohne Daten zu erhalten.

Ich bin mir bewusst, dass es eine Überlastung von ReadAsync gibt, die ein CancellationToken bereitstellt, aber es scheint, dass das Token ignoriert wird, da NetworkStream das standardmäßige ReadAsync-Verhalten nicht außer Kraft setzt (sieheNetworkStream.ReadAsync mit einem Abbruchtoken wird niemals abgebrochen).

Ich habe versucht, den zugrunde liegenden Stream zu schließen. Dadurch wird beim wartenden ReadAsync-Aufruf die ObjectDisposedException ausgelöst, und die zugrunde liegende Bluetooth-Verbindung wird ebenfalls geschlossen. Idealerweise möchte ich die Verbindung zum Gerät nicht vollständig trennen, nur um das Lesen zu beenden. Es scheint keine saubere Methode zu sein, und es ist unnötig, den gesamten Stream abzubrechen, um einen ReadAsync () - Aufruf zu unterbrechen.

Irgendein Rat?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage