Поделиться через


Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Метод

Определение

Начинает операцию асинхронного чтения. (Рекомендуется использовать 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 . Эти методы по-прежнему доступны в платформа .NET Framework 4.5 для поддержки устаревшего кода. Однако новые асинхронные методы, такие как ReadAsync, WriteAsync, CopyToAsyncи FlushAsync, упрощают реализацию асинхронных операций ввода-вывода.

Реализация BeginRead по умолчанию в потоке Read вызывает метод синхронно, что означает, что Read некоторые потоки могут блокироваться. Однако экземпляры классов, такие как FileStream и , NetworkStream полностью поддерживают асинхронные операции, если экземпляры были открыты асинхронно. Поэтому вызовы не BeginRead будут блокироваться в этих потоках. Вы можете переопределить BeginRead (например, с помощью асинхронных делегатов), чтобы обеспечить асинхронное поведение.

Передайте возвращаемое IAsyncResult значение методу EndRead потока, чтобы определить, сколько байтов было прочитано, и освободить ресурсы операционной системы, используемые для чтения. EndRead должен вызываться один раз для каждого вызова BeginRead. Это можно сделать с помощью того же кода, который вызвал BeginRead , или в обратном вызове, переданном в BeginRead.

Текущая позиция в потоке обновляется при выполнении асинхронного чтения или записи, а не после завершения операции ввода-вывода.

Несколько одновременных асинхронных запросов делают порядок завершения запроса неопределенным.

Используйте свойство , CanRead чтобы определить, поддерживает ли текущий экземпляр чтение.

Если поток закрыт или вы передаете недопустимый аргумент, исключения немедленно создаются из BeginRead. Ошибки, возникающие во время асинхронного запроса на чтение, такие как сбой диска во время запроса ввода-вывода, возникают в потоке пула потоков и вызывают исключения при вызове EndRead.

Применяется к

См. также раздел