我想使用NetworkStream.ReadAsync()来读取数据,但我找不到如何取消一次调用的ReadAsync()。对于后台,NetworkStream由连接的BluetoothClient对象(来自32Feet.NET蓝牙库)提供给我。如何取消NetworkStream.ReadAsync而不关闭流
我正在尝试的当前get-it-working代码如下。
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()线。我无法看到如何在不接收数据的情况下中止通话。
我知道有一个提供CancellationToken的ReadAsync的重载,但是由于NetworkStream没有覆盖默认的ReadAsync行为,因此该标记被忽略(请参阅NetworkStream.ReadAsync with a cancellation token never cancels)。
我试过关闭基础流,这导致等待ReadAsync调用抛出ObjectDisposedException,并且底层蓝牙连接也被关闭。理想情况下,我不想完全切断与设备的连接只是为了停止阅读。它似乎并不是一种干净的方式,并且认为不必为了中断ReadAsync()调用而拆除整个流。
有什么建议吗?
我都忘了关于检查DataAvailable!感谢您的示例代码和Stephen Toub文章的链接。两者都将有助于我实现这一目标。谢谢! – Swampie 2013-03-08 09:25:41