我对ReadTimeout是如何使用的以及它如何影响read()感到困惑。
在尝试读取网络流时,假设我们尝试读取x个字节,则有3种情况:
数据可用,字节数据可用,字节=x
数据可用,字节>x
无可用数据,且ReadTimeout>0
无可用数据,且ReadTimeout=0
文档有点含糊不清,在调用ReadTimeout时没有明确提及Read(),或者ReadTimeout是否影响Read()调用。
此方法将数据读取到缓冲区参数中,并返回成功读取的字节数。如果没有可供读取的数据,则read方法返回0。读取操作读取尽可能多的可用数据,最多可达size参数指定的字节数。
我了解的是上述5种情况:
Read()将以x字节读取并立即返回。ReadTimeout不重要
Read()将读取x字节并返回
Read()将读取x字节并返回。需要再次调用read来读取x字节的其余部分。
调用Read()将等待数据的ReadTimeout时间段。
Read()将立即返回0。
如果有人能澄清一下,我将不胜感激。
谢谢您。

最佳答案

如果您查看source for NetworkStream,您将看到场景1-4和理解是正确的(NetworkStream只是在套接字上调用read())。过期超时的重新获取是一个ioexception,内部socketexception指示超时。
场景5不适用:readTimeout不能为零,它可以是负1(-1,表示无限)或大于等于1。所以说是气味。5要么永远是块,要么得到一个IOException,其内部socketException指示一些错误。

10-08 19:23