我应该使用 Stream.CopyToAsync() 从网络流中复制数据吗?

Should I use Stream.CopyToAsync() to copy data from a network stream?

我正在从一个TcpClientNetworkStream获取数据,我想将数据写入一个固定长度的MemoryStream,因为我知道数据的大小。

我用Stream.CopyToAsync把数据写入MemoryStream:

var result = new MemoryStream(size);
await ns.CopyToAsync(result);
result.Position = 0;

return result;

查看 Stream.CopyToAsyncsource code,当源流中没有数据时,该方法终止。就我而言,当网络连接缓慢或中断时,我的方法将 return 不完整 MemoryStream

我可以忽略这种可能性还是应该自己读取流,因为我知道将发送多少数据?

因为 NetworkStream.Read 会阻塞 1 直到有数据,只有 return 0 如果连接关闭,我不认为这比 CopyToAsync.

更能满足您的需求

由于您已经知道希望接收多少数据,我建议您只检查 MemoryStream 是否具有所需的长度:

var result = new MemoryStream(size);
await ns.CopyToAsync(result);

if (result.Length != size) {
     // it didn't load everything
}

result.Position = 0;

return result;

1