Cómo cancelar NetworkStream.ReadAsync sin cerrar el flujo

Estoy tratando de usar NetworkStream.ReadAsync () para leer datos pero no puedo encontrar la forma de cancelar el ReadAsync () una vez que se llama. Para el fondo, el objeto BluetoothClient me proporciona el NetworkStream (de la biblioteca Bluetooth de 32Feet.NET).

El código actual de Get-It-Working que estoy intentando está abajo.

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");

El código funciona bien recibiendo datos, y se detendrá en bucle si el indicador continueReading se establece en falso y se reciben datos, pero hasta que se reciban los datos, no pasará la línea ReadAsync (). No puedo ver cómo abortar la llamada sin recibir datos.

Soy consciente de que hay una sobrecarga de ReadAsync que proporciona un CancelToken cancelado, pero parece que como NetworkStream no invalida el comportamiento predeterminado de ReadAsync, el token se ignora (verNetworkStream.ReadAsync con un token de cancelación nunca se cancela).

He intentado cerrar la secuencia subyacente, y esto hace que la llamada en espera de ReadAsync lance la excepción ObjectDisposedException, y la conexión Bluetooth subyacente también se cierre. Idealmente, no quiero cortar completamente la conexión con el dispositivo solo para dejar de leer. No parece ser una forma limpia de hacerlo, y se siente innecesario cortar todo el flujo solo para interrumpir una llamada ReadAsync ().

¿Algún consejo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta