System.IO.Stream.BeginWrite 方法

方法描述

开始异步写操作。

语法定义

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public virtual IAsyncResult BeginWrite(
	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(可能仍处于挂起状态)。

提示和注释

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

将当前方法返回的 IAsyncResult 传递给 EndWrite 以确保写入操作完成并相应地释放资源。 每次调用 BeginWrite 时都必须调用一次 EndWrite。 这可以通过与调用 BeginWrite 相同的代码来完成,或者在传递给 BeginWrite 的回调中完成。 如果在异步写入期间发生错误,则在使用此方法返回的 IAsyncResult 调用 EndWrite 之前,不会引发异常。

如果流是可写的,则在流的末尾写入将使该流扩展。

当发出异步读取或写入时而不是在 I/O 操作完成时,流中的当前位置被更新。 多个同时进行的异步请求会使请求完成顺序不确定。

使用 CanWrite 属性可确定当前实例是否支持写入。

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

注意

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

System.IO.Stream.BeginWrite 方法例子


异常

异常 异常描述
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 系统要求。