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?