我想使用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