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


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, WriteAsyncCopyToAsyncиFlushAsync, помогают реализовать асинхронные операции ввода-вывода.

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

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

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

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

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

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

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

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