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.