Como cancelar o NetworkStream.ReadAsync sem fechar o fluxo

Eu estou tentando usar NetworkStream.ReadAsync () para ler dados, mas não consigo encontrar como cancelar o ReadAsync () uma vez chamado. Para o fundo, o NetworkStream é fornecido a mim por um objeto BluetoothClient conectado (da Biblioteca Bluetooth 32Feet.NET).

O código atual de trabalho que estou tentando está abaixo.

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

O código funciona bem recebendo dados e irá parar o loop se o sinalizador continueReading estiver definido como false e os dados forem recebidos, mas até que os dados sejam recebidos, eles não passarão da linha ReadAsync (). Não consigo ver como cancelar a chamada sem receber dados.

Estou ciente de que há uma sobrecarga de ReadAsync que fornece um CancellationToken, mas parece que como o NetworkStream não substitui o comportamento padrão ReadAsync, o token é ignorado (consulteNetworkStream.ReadAsync com um token de cancelamento nunca cancela).

Eu tentei fechar o fluxo subjacente, e isso faz com que a chamada ReadAsync em espera para lançar ObjectDisposedException e a conexão Bluetooth subjacente seja fechada também. Idealmente, não quero cortar completamente a conexão com o dispositivo apenas para parar de ler. Não parece uma maneira limpa de fazê-lo, e parece desnecessário derrubar todo o fluxo apenas para interromper a chamada va ReadAsync ().

Algum conselho?

questionAnswers(3)

yourAnswerToTheQuestion