我正在尝试使用NetworkStream.ReadAsync()来读取数据,但我无法找到如何在调用后取消ReadAsync()的方法。需要说明的是,NetworkStream由一个已连接的BluetoothClient对象(来自32Feet.NET蓝牙库)提供。
我正在尝试的当前代码如下。
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");
代码在接收数据方面运行良好,如果continueReading标志被设置为false并且接收到数据,则会停止循环,但在接收到数据之前,它将无法继续执行ReadAsync()线。我不知道如何在不接收数据的情况下中止调用。
我知道有一个重载的ReadAsync方法提供了CancellationToken,但似乎由于NetworkStream没有覆盖默认的ReadAsync行为,该令牌会被忽略(请参见NetworkStream.ReadAsync with a cancellation token never cancels)。
我尝试关闭底层流,这会导致等待的ReadAsync调用抛出ObjectDisposedException,并且底层的蓝牙连接也会关闭。理想情况下,我不想完全断开与设备的连接,只是想停止读取。这似乎不是一种清洁的方法,并且感觉没有必要拆除整个流以中断va ReadAsync()调用。
有什么建议吗?