NetworkStream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 方法

定义

NetworkStream 开始异步读取。

public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int size, AsyncCallback ^ callback, System::Object ^ state);
public:
 override IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public override IAsyncResult BeginRead (byte[] buffer, int offset, int size, AsyncCallback callback, object state);
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, size As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
Public Overrides Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult

参数

buffer
Byte[]

一个 Byte 类型的数组,它是内存中用于存储从 NetworkStream 读取的数据的位置。

offset
Int32

buffer 中开始存储数据的位置。

sizecount
Int32

要从 NetworkStream 中读取的字节数。

state
Object

一个包含用户定义的任何附加数据的对象。

返回

一个表示异步调用的 IAsyncResult

例外

buffer 参数为 null

offset 参数小于 0。

- 或 -

offset 参数大于 buffer 参数的长度。

- 或 -

size 小于 0。

- 或 -

size 大于 buffer 的长度减去 offset 参数的值。

已关闭基础 Socket

- 或 -

从网络读取时出错。

- 或 -

访问套接字时出错。

注解

重要

这是一个兼容性 API,不建议使用 APM (Begin/End) 方法进行新开发。 请改用基于任务的等效项。

可以将实现的AsyncCallbackBeginRead回调传递给 ,以获取有关操作完成的通知。 请注意,如果基础网络堆栈同步完成操作,将在调用 BeginRead期间内联执行回调。 在这种情况下, CompletedSynchronously 返回 IAsyncResult 的 上的 属性将设置为 true 以指示该方法同步完成。 AsyncState使用 的 IAsyncResult 属性获取传递给 BeginRead 方法的状态对象。

BeginRead必须通过调用 EndRead 方法完成操作。 通常,方法由提供的 AsyncCallback 委托调用。 EndRead 将阻止调用线程,直到操作完成。

该操作读取的可用数据量最多为 参数指定的 size 字节数。

注意

如果收到 ,IOException检查 InnerException 属性,以确定它是否由 SocketException引起。 如果是这样,请使用 ErrorCode 属性获取特定的错误代码。

可以在类的 NetworkStream 实例上同时执行读取和写入操作,而无需同步。 只要写入操作有一个唯一线程,读取操作有一个唯一线程,读写线程之间就不存在交叉干扰,也不需要同步。

适用于

另请参阅