System.IO.FileStream.BeginRead 方法

方法描述

开始异步读。

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

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public override IAsyncResult BeginRead(
	byte[] array,
	int offset,
	int numBytes,
	AsyncCallback userCallback,
	Object stateObject
)

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
array System-Byte[] 要读入数据的缓冲区。
offset System-Int32 array 中的字节偏移量,从此处开始读取。
numBytes System-Int32 最多读取的字节数。
userCallback System-AsyncCallback 异步读操作完成后调用的方法。
stateObject System-Object 一个用户提供的对象,它将该特定的异步读取请求与其他请求区别开来。
返回值 System.IAsyncResult 引用异步读取的对象。

提示和注释

每次调用 BeginRead 时都必须调用一次 EndRead。 无法结束一个读取进程就开始另一个读取可能导致死锁等不希望出现的行为。

FileStream 提供了两种不同的操作模式:同步 I/O 和异步 I/O。 尽管两者都可使用,但是基础操作系统资源可能只允许采用其中一种模式进行访问。 默认情况下,FileStream 同步打开操作系统句柄。 在 Windows 中,这将降低异步方法的速度。 如果使用异步方法,请使用 FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) 构造函数。

注意

使用 CanRead 属性可确定当前实例是否支持读取。 有关更多信息,请参见CanRead。

如果流已关闭或者传递了无效的参数,将立即从 BeginRead 中引发异常。 在异步读取请求过程中出现的错误(例如 IO 请求过程中磁盘出现故障)会在线程池线程上发生,并且在调用 EndRead 时变为可见。

必须用此 IAsyncResult 调用 EndRead,以确定所读取的字节数。

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

有关通用 I/O 任务的列表,请参见通用 I/O 任务。

注意

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

System.IO.FileStream.BeginRead 方法例子

此代码示例是为 FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) 构造函数提供的一个更大示例的一部分。

static void EndWriteCallback(IAsyncResult asyncResult)
{
    State tempState = (State)asyncResult.AsyncState;
    FileStream fStream = tempState.FStream;
    fStream.EndWrite(asyncResult);

    // Asynchronously read back the written data.
    fStream.Position = 0;
    asyncResult = fStream.BeginRead(
        tempState.ReadArray, 0 , tempState.ReadArray.Length, 
        new AsyncCallback(EndReadCallback), tempState);

    // Concurrently do other work, such as 
    // logging the write operation.
}

异常

异常 异常描述
ArgumentException 数组长度减去 offset 小于 numBytes。
ArgumentNullException array 为 null。
ArgumentOutOfRangeException offset 或 numBytes 为负。
IOException 尝试在文件的末尾之外进行异步读取。

命名空间

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 系统要求。