Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

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

 

Опубликовано: Октябрь 2016

Начинает операцию асинхронного чтения. (Попробуйте вместо этого использовать метод ReadAsync; см. раздел "Примечания".)

Пространство имен:   System.IO
Сборка:  mscorlib (в mscorlib.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, ExternalThreading = true)]
public virtual IAsyncResult BeginRead(
	byte[] buffer,
	int offset,
	int count,
	AsyncCallback callback,
	object state
)

Параметры

buffer
Type: System.Byte[]

Буфер, в который необходимо считать данные.

offset
Type: System.Int32

Смещение байтов в буфере buffer, с которого начинается запись данных, считанных из потока.

count
Type: System.Int32

Максимальное число байтов, предназначенных для чтения.

callback
Type: System.AsyncCallback

Дополнительный асинхронный обратный вызов по завершении чтения.

state
Type: System.Object

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

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

Type: System.IAsyncResult

IAsyncResult представляет асинхронное чтение, которое все еще может быть отложено.

Exception Condition
IOException

Попытка асинхронного чтения за концом потока или возникновение ошибки диска.

ArgumentException

Один или несколько аргументов являются недопустимыми.

ObjectDisposedException

Методы были вызваны после закрытия потока.

NotSupportedException

Текущий 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.

.NET Framework
Доступно с 1.1
Переносимая библиотека классов
Поддерживается в: переносимые платформы .NET
Silverlight
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.0
Вернуться в начало
Показ: