System.IO.Stream.BeginRead 方法

方法描述

开始异步读操作。

语法定义(C# System.IO.Stream.BeginRead 方法 的用法)

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public virtual IAsyncResult BeginRead(
	byte[] buffer,
	int offset,
	int count,
	AsyncCallback callback,
	Object state
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
buffer System-Byte[] 数据读入的缓冲区。
offset System-Int32 buffer 中的字节偏移量,从该偏移量开始写入从流中读取的数据。
count System-Int32 最多读取的字节数。
callback System-AsyncCallback 可选的异步回调,在完成读取时调用。
state System-Object 一个用户提供的对象,它将该特定的异步读取请求与其他请求区别开来。
返回值 System.IAsyncResult 表示异步读取的 IAsyncResult(可能仍处于挂起状态)。

提示和注释

BeginRead 在流上的默认实现将同步调用 Read 方法,这意味着 Read 在某些流上可能发生阻塞。 但是,如果已经异步打开某些类(如 FileStream 和 NetworkStream)的实例,则这些实例将完全支持异步操作。 因此,对 BeginRead 的调用不会在那些流上阻塞。 可以重写 BeginRead(例如,使用异步委托)以提供异步行为。

将 IAsyncResult 返回值传递给流的 EndRead 方法,以确定已读取的字节数并释放用于进行读取的操作系统资源。 每次调用 BeginRead 时都必须调用一次 EndRead。 这可以通过与调用 BeginRead 相同的代码来完成,或者在传递给 BeginRead 的回调中完成。

当发出异步读取或写入时而不是在完成 I/O 操作时,流中的当前位置被更新。

多个同时进行的异步请求会使请求完成顺序不确定。

使用 CanRead 属性可确定当前实例是否支持读取。

如果流已关闭或者传递了无效的参数,将立即从 BeginRead 中引发异常。 异步读取请求期间出现的错误(如 I/O 请求期间的磁盘故障)发生在线程池线程上,并在调用 EndRead 时引发异常。

注意

应用到此类型或成员的 HostProtectionAttribute 特性具有以下 Resources 属性值:ExternalThreading。HostProtectionAttribute 不影响桌面应用程序(桌面应用程序一般通过双击图标、键入命令或在浏览器中输入 URL 启动)。有关更多信息,请参见 HostProtectionAttribute 类或 SQL Server 编程和宿主保护特性。

System.IO.Stream.BeginRead 方法例子


异常

异常 异常描述
IOException 尝试的异步读取超过了流的结尾,或者发生了磁盘错误。
ArgumentException 一个或多个参数无效。
ObjectDisposedException 在流关闭后调用方法。
NotSupportedException 当前 Stream 实现不支持读取操作。

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。