Stream.Read的结果如果ReadTimeout中没有可用的字节,但很快就会出现?

时间:2018-04-06 09:58:38

标签: c# stream timeout

我必须创建一个可读的流。由于访问外部源,流很慢地填充了数据。为了节省内存,我希望流的用户尽快读取数据。

问题:如果现在没有字节可用,Stream.Read会返回什么但很快就会返回?

MSDN about Stream.Read

  

实现返回读取的字节数。实施   在这种情况下,将阻塞直到至少一个字节的数据被读取   没有数据可用。只有在没有更多时,读取才返回0   流中的数据不再是预期的。实施是免费的   返回的字节数少于请求的字节数,即使流的末尾有   没有达到。

唉,这个描述没有说明ReadTimeout。

MSDN about Stream.ReadTimeout

  

获取或设置一个以毫秒为单位的值,该值确定了多长时间   流将在超时之前尝试读取。 ReadTimeout   应该重写属性以提供适当的行为   流。

好的,所以阅读很清楚,不是吗?

  • 如果有更多可用字节,则返回请求的字节。
  • 如果请求的字节数多于当前可用的字节数,则返回所有可用字节,返回值表示返回的字节数。
  • 如果现在没有字节可用,但尚未到达流的末尾,那么将来显然会有一些字节可用。在这种情况下,函数应该等待任何字节变为可用的最大ReadTimeout ,并在任何字节可用时立即返回所有可用字节,最大请求的字节数。
  • 当且仅当没有可用字节且由于到达流末尾而没有字节可用时,返回值将为0.

但是如果未达到流的末尾并且ReadTimeout中没有可用的字节该怎么办?

我无法返回0,因为这意味着会到达流的末尾。

我应该提出TimeOutException,虽然Stream.Read没有提到它吗?

Stream.Read返回的标准反应是什么,如果没有字节可用于ReadTimeout但是还没有到达流的末尾?

0 个答案:

没有答案