stream.beginread一般是用于异步读,而stream.read则用于同步读,
其中在一参考书中描述说调用stream.beginread时同步调用stream.read,
但在另一参考书中却又描述stream.read缺省实现是调用stream.beginread方法,
请问各位大侠解释一下:
到底是谁调用谁呢,还是互不关联?

解决方案 »

  1.   

    其中在一参考书中描述说调用stream.beginread时同步调用stream.read这个说法是正确的。http://msdn.microsoft.com/zh-cn/library/system.io.stream.beginread(VS.80).aspx
      

  2.   

    但里面的解释有点不明白,
    BeginRead 在流上的默认实现将同步调用 Read 方法,这意味着 Read 在某些流上可能发生阻塞。但是,如果已经异步打开某些类(如 FileStream 和 NetworkStream)的实例,则这些实例将完全支持异步操作。因此,对 BeginRead 的调用不会在那些流上阻塞。可以重写 BeginRead(例如,使用异步委托)以提供异步行为。1.这里说的异步打开某些类(如 FileStream 和 NetworkStream)的实例,是指类似File.open()打开的FileStream的吗?
    2.可以重写 BeginRead(例如,使用异步委托)以提供异步行为。这里说的重写是否是指FileStream等中已经实现的BeginRead的方法?
      

  3.   

    1-> 是指调用构造函数时 指定参数useAsync为true ,默认为false。2-> 嗯,是的。
      

  4.   

    beginread异步(delegate回),read同步(马上回)
      

  5.   

    谢谢Sandy945和JulioHuang的解释
    另外请问一下两位:
    BeginRead 在流上的默认实现将同步调用 Read 方法,这意味着 Read 在某些流上可能发生阻塞。
    这句话是不是可以理解为stream.beginread方法中一定会调用Read方法,进而理解为BeginRead也可能会发生阻塞这种情况
      

  6.   

    补充一下。
    http://topic.csdn.net/t/20060104/17/4498205.html
    此贴支持stream.beginread是异步非阻塞的观点。
      

  7.   

    这句话是不是可以理解为stream.beginread方法中一定会调用Read方法
    ---------------------------------------------------------
    不是的。
    BeginRead也可能会发生阻塞这种情况
    -------------------------------
    这个是对的。你没有仔细看我在#3的回复, 又或者说我在#1的回复说的不完整其中在一参考书中描述说调用stream.beginread时同步调用stream.read这个确切的说是部分正确的,就是说默认情况调用stream.beginread时会调用stream.read这是同步的,所以会发生阻塞。但还有非默认的情况,就是我在#3说的,构造流对象时 你指定useAsync 为true 这个时候再调用stream.beginread 就是异步的。这种情况就是“如果已经异步打开某些类(如 FileStream 和 NetworkStream)的实例,则这些实例将完全支持异步操作。”
      

  8.   

    感谢Sandy945非常详细的描述,希望以后能经常得到你的指点。