Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
开始异步读操作。 (请考虑改用 ReadAsync(Byte[], Int32, Int32)。)
public:
virtual IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object? state);
abstract member BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overridable Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
参数
- buffer
- Byte[]
数据读入的缓冲区。
- offset
- Int32
buffer
中的字节偏移量,从该偏移量开始写入从流中读取的数据。
- count
- Int32
最多读取的字节数。
- callback
- AsyncCallback
可选的异步回调,在完成读取时调用。
- state
- Object
一个用户提供的对象,它将该特定的异步读取请求与其他请求区别开来。
返回
表示异步读取的 IAsyncResult(可能仍处于挂起状态)。
例外
尝试的异步读取超过了流的结尾,或者发生了磁盘错误。
一个或多个自变量无效。
在流关闭后调用方法。
当前 Stream
实现不支持读取操作。
注解
在 .NET Framework 4 和更早的版本中,您必须使用 BeginRead 和 EndRead 之类的方法来实现异步 I/O 操作。 这些方法在 .NET Framework 4.5 中仍然可用,以支持旧代码;但是,新的异步方法(如 ReadAsync、WriteAsync、 CopyToAsync和 FlushAsync)可帮助你更轻松地实现异步 I/O 操作。
流上 的默认 BeginRead
实现同步调用 Read 方法,这意味着 Read
可能会在某些流上阻止。 但是,如果实例已异步打开,则 类(如 和 NetworkStream
)FileStream
的实例完全支持异步操作。 因此,对这些 BeginRead
流的调用不会阻止。 可以使用异步委托替代 BeginRead
(,例如) 来提供异步行为。
将 IAsyncResult
返回值传递给 EndRead 流的 方法,以确定读取的字节数并释放用于读取的操作系统资源。 EndRead 每次调用 BeginRead都必须调用一次。 为此,可以使用调用 的相同代码,或者在传递给 的BeginRead
回调中调用 BeginRead
或 。
发出异步读取或写入操作时,而不是在 I/O 操作完成时更新流中的当前位置。
多个同时异步请求使请求完成顺序不确定。
CanRead使用 属性确定当前实例是否支持读取。
如果关闭流或传递了无效参数,则会立即从 BeginRead
引发异常。 异步读取请求期间发生的错误(例如 I/O 请求期间发生的磁盘故障)发生在线程池线程上,并在调用 EndRead
时引发异常。