我对ReadTimeout
是如何使用的混乱,这将如何影响阅读()。的NetworkStream:ReadTimeout及其影响阅读()
当试图读取网络流,有3个场景中,假设我们正在尝试读取的字节X数:
- 数据是可用的,和字节< X
- 数据是可用的,并字节= X
- 数据是可用的,和字节> X
- 没有数据是可用的,并且
ReadTimeout
> 0 - 没有数据是可用的,和
ReadTimeout
= 0
的文档是有点含糊不清,没有明确提到在通话约ReadTimeout
到Read()
,还是ReadTimeout
影响Read()
电话都没有。
该方法将数据读入缓冲区参数并返回成功读取的字节数。如果没有数据可用于读取,则Read方法返回0. Read操作将读取尽可能多的数据,直到由size参数指定的字节数。
我的理解是上述5种情景:
Read()
将在X字节读取并立即返回。ReadTimeout
不要紧Read()
将读取X字节,并返回Read()
将读取X字节,并返回。需要再次读取读取其余的X字节。- 电话
Read()
将等待ReadTimeout
一段时间内的数据。 Read()
将与0
立即返回将不胜感激,如果有人可以提供一些澄清。
谢谢。
'Read()'将阻塞,直到数据可用或另一方关闭连接。我认为这里的文档颇具误导性,说“如果没有数据可用于读取,则Read方法返回0”。 –
你要阅读的文档['ReadTimeout'](https://msdn.microsoft.com/en-us/library/bk6w7hs8(V = vs.110)的.aspx):在读操作的时间*“量阻止等待数据“*。'Read()'实际上会阻塞调用者,直到接收到足够的数据以复制到缓冲区。除非有错误(你得到'0'字节)或超时(你比你问的要少)。 – Sinatr
实际上'Read'会抛出超时,所以我不知道它何时会返回更少。阻止部分是[正确](https://stackoverflow.com/a/6958290/1997232)。 – Sinatr