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


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

Определение

Начинает асинхронную операцию записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32) вместо этого.)

public:
 virtual IAsyncResult ^ BeginWrite(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public virtual IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state);
public virtual IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object? state);
abstract member BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginWrite : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overridable Function BeginWrite (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 и более ранних версиях необходимо использовать такие методы, как BeginWrite и EndWrite реализовать асинхронные операции ввода-вывода. Эти методы по-прежнему доступны в .NET Framework 4.5 для поддержки устаревшего кода; однако новые асинхронные методы, такие как ReadAsync, WriteAsyncCopyToAsyncиFlushAsync, помогают реализовать асинхронные операции ввода-вывода.

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

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

Если поток доступен для записи, запись в конце потока расширяет поток.

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

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

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

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

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