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.