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

Определение

Начинает операцию асинхронного чтения.Begins an asynchronous read operation. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)(Consider using ReadAsync(Byte[], Int32, Int32) instead.)

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);
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[]

Буфер, в который необходимо считать данные.The buffer to read the data into.

offset
Int32

Смещение байтов в буфере buffer, с которого начинается запись данных, считанных из потока.The byte offset in buffer at which to begin writing data read from the stream.

count
Int32

Максимальное число байтов, предназначенных для чтения.The maximum number of bytes to read.

callback
AsyncCallback

Дополнительный асинхронный ответный вызов по завершении чтения.An optional asynchronous callback, to be called when the read is complete.

state
Object

Предоставляемый пользователем объект, являющийся отличительным признаком данного конкретного запроса на асинхронное чтение от других запросов.A user-provided object that distinguishes this particular asynchronous read request from other requests.

Возвращаемое значение

IAsyncResult представляет асинхронное чтение, которое может все еще быть отложено.An IAsyncResult that represents the asynchronous read, which could still be pending.

Исключения

Попытка выполнить чтение в асинхронном режиме за пределами конца потока или ошибка диска.Attempted an asynchronous read past the end of the stream, or a disk error occurs.

Один или несколько аргументов являются недопустимыми.One or more of the arguments is invalid.

Методы были вызваны после закрытия потока.Methods were called after the stream was closed.

Текущая реализация класса Stream не поддерживает операцию чтения.The current Stream implementation does not support the read operation.

Комментарии

В платформе .NET Framework 4 и более ранних версий для реализации операций асинхронного ввода-вывода необходимо использовать такие методы, как BeginRead и EndRead .In the .NET Framework 4 and earlier versions, you have to use methods such as BeginRead and EndRead to implement asynchronous I/O operations. Эти методы по-прежнему доступны в .NET Framework 4.5.NET Framework 4.5 для поддержки устаревшего кода; Однако новые асинхронные методы, такие как ReadAsync, WriteAsync, CopyToAsyncи FlushAsync, упрощают реализацию асинхронных операций ввода-вывода.These methods are still available in the .NET Framework 4.5.NET Framework 4.5 to support legacy code; however, the new async methods, such as ReadAsync, WriteAsync, CopyToAsync, and FlushAsync, help you implement asynchronous I/O operations more easily.

Реализация BeginRead в потоке по умолчанию вызывает метод Read синхронно, то есть Read может блокироваться в некоторых потоках.The default implementation of BeginRead on a stream calls the Read method synchronously, which means that Read might block on some streams. Однако экземпляры классов, такие как FileStream и NetworkStream, полностью поддерживают асинхронные операции, если экземпляры были открыты асинхронно.However, instances of classes such as FileStream and NetworkStream fully support asynchronous operations if the instances have been opened asynchronously. Таким образом, вызовы BeginRead не будут блокироваться в этих потоках.Therefore, calls to BeginRead will not block on those streams. Можно переопределить BeginRead (например, с помощью асинхронных делегатов) для обеспечения асинхронного поведения.You can override BeginRead (by using async delegates, for example) to provide asynchronous behavior.

Передайте возвращаемое значение IAsyncResult методу EndRead потока, чтобы определить количество считанных байтов и освободить ресурсы операционной системы, используемые для чтения.Pass the IAsyncResult return value to the EndRead method of the stream to determine how many bytes were read and to release operating system resources used for reading. EndRead необходимо вызывать один раз для каждого вызова BeginRead.EndRead must be called once for every call to BeginRead. Это можно сделать с помощью того же кода, который вызывал BeginRead, или в обратном вызове, переданном BeginRead.You can do this either by using the same code that called BeginRead or in a callback passed to BeginRead.

Текущая позицией в потоке обновляется при выдаче асинхронного чтения или записи, а не по завершении операции ввода-вывода.The current position in the stream is updated when the asynchronous read or write is issued, not when the I/O operation completes.

Несколько одновременных асинхронных запросов отрабатывают порядок выполнения запроса неопределенным образом.Multiple simultaneous asynchronous requests render the request completion order uncertain.

Используйте свойство CanRead, чтобы определить, поддерживает ли текущий экземпляр чтение.Use the CanRead property to determine whether the current instance supports reading.

Если поток закрыт или передан недопустимый аргумент, исключения немедленно создаются из BeginRead.If a stream is closed or you pass an invalid argument, exceptions are thrown immediately from BeginRead. Ошибки, возникающие во время асинхронного запроса чтения, такие как сбой диска во время запроса ввода-вывода, происходят в потоке пула потоков и вызывают исключения при вызове EndRead.Errors that occur during an asynchronous read request, such as a disk failure during the I/O request, occur on the thread pool thread and throw exceptions when calling EndRead.

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

Дополнительно