stream.beginread一般是用于异步读,而stream.read则用于同步读,
其中在一参考书中描述说调用stream.beginread时同步调用stream.read,
但在另一参考书中却又描述stream.read缺省实现是调用stream.beginread方法,
请问各位大侠解释一下:
到底是谁调用谁呢,还是互不关联?
其中在一参考书中描述说调用stream.beginread时同步调用stream.read,
但在另一参考书中却又描述stream.read缺省实现是调用stream.beginread方法,
请问各位大侠解释一下:
到底是谁调用谁呢,还是互不关联?
BeginRead 在流上的默认实现将同步调用 Read 方法,这意味着 Read 在某些流上可能发生阻塞。但是,如果已经异步打开某些类(如 FileStream 和 NetworkStream)的实例,则这些实例将完全支持异步操作。因此,对 BeginRead 的调用不会在那些流上阻塞。可以重写 BeginRead(例如,使用异步委托)以提供异步行为。1.这里说的异步打开某些类(如 FileStream 和 NetworkStream)的实例,是指类似File.open()打开的FileStream的吗?
2.可以重写 BeginRead(例如,使用异步委托)以提供异步行为。这里说的重写是否是指FileStream等中已经实现的BeginRead的方法?
另外请问一下两位:
BeginRead 在流上的默认实现将同步调用 Read 方法,这意味着 Read 在某些流上可能发生阻塞。
这句话是不是可以理解为stream.beginread方法中一定会调用Read方法,进而理解为BeginRead也可能会发生阻塞这种情况
http://topic.csdn.net/t/20060104/17/4498205.html
此贴支持stream.beginread是异步非阻塞的观点。
---------------------------------------------------------
不是的。
BeginRead也可能会发生阻塞这种情况
-------------------------------
这个是对的。你没有仔细看我在#3的回复, 又或者说我在#1的回复说的不完整其中在一参考书中描述说调用stream.beginread时同步调用stream.read这个确切的说是部分正确的,就是说默认情况调用stream.beginread时会调用stream.read这是同步的,所以会发生阻塞。但还有非默认的情况,就是我在#3说的,构造流对象时 你指定useAsync 为true 这个时候再调用stream.beginread 就是异步的。这种情况就是“如果已经异步打开某些类(如 FileStream 和 NetworkStream)的实例,则这些实例将完全支持异步操作。”