我目前正在收到一个' ObjectDisposed'例外,我不知道如何解决它。我确定在开始读取操作之前检查流是否未关闭:
token.ThrowIfCancellationRequested();
int amount = await stream.ReadAsync(buffer, offset, buffer.Length - offset, token);
在关闭流之前,我取消了任何待处理的读取:
tokenSource.Cancel();
stream.Close();
但是,我仍然得到以下例外:
无法访问已处置的对象。 对象名称:' System.Net.Sockets.NetworkStream'。
这是虚假的,所以它似乎是一种竞争条件,但它经常发生,足以让我重现它。似乎有三种可能性:
CancellationTokenSource
不是原子的(快速谷歌没有回答这个问题)NetworkStream
提供的优先级高于被取消如何更优雅地处理这个问题?请记住我目前正在使用的以下限制:
using
块中NetworkStream