在回调中,NetworkStream.BeginRead我似乎注意到始终读取所有字节。我看到许多教程检查BytesRead是否小于总字节,如果是,请再次读取,但是似乎从来没有。
if (bytesRead < totalBytes)即使一次发送大量数据(数千个字符),并且即使缓冲区大小设置为非常小的值(大约16个),该条件也永远不会触发。
我没有使用“老式方式”进行测试,因为我正在使用Task.Factory.FromAsync而不是调用NetworkStream.BeginRead并提供一个我称为EndRead的回调。也许Tasks自动包含了直到读取完所有数据才返回的功能?我不确定。
无论哪种方式,我仍然对何时不能一次读取所有数据感到好奇。甚至需要检查是否未读取所有数据,如果需要,则再次读取?我似乎无法获得有条件运行的条件。
谢谢。