我对如何使用ReadTimeout
以及它如何影响Read()感到困惑。
尝试读取网络流时,有3种情况,假设我们正在尝试读取X个字节:
ReadTimeout
> 0 ReadTimeout
= 0 文档有点模棱两可,未在ReadTimeout
调用中明确提及Read()
,或ReadTimeout
是否会影响Read()
来电。
此方法将数据读入buffer参数并返回成功读取的字节数。如果没有可用于读取的数据,则Read方法返回0. Read操作读取尽可能多的数据,最多为size参数指定的字节数。
我理解的是上述5种情况:
Read()
将以X字节读取并立即返回。 ReadTimeout
并不重要Read()
将读取X个字节并返回Read()
将读取X个字节并返回。需要再次调用read来读取剩余的X字节。Read()
将等待ReadTimeout
段数据。Read()
将立即返回0。如果有人能给出一些澄清,我将非常感激。
谢谢。
答案 0 :(得分:1)
如果查看source for NetworkStream,您会看到您的方案1 - 4和理解是正确的(NetworkStream只是在套接字上调用read())。过期超时的结果是IOException,内部SocketException指示超时。
场景5不适用:读取时间为零不能存在,它是减1(-1,意味着无限)或> = 1.所以情景。 5将永远阻塞或获得一个IOException,内部SocketException指示一些错误。