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, WriteAsync, CopyToAsyncи FlushAsync, упрощают реализацию асинхронных операций ввода-вывода.
Реализация BeginWrite
по умолчанию в потоке Write вызывает метод синхронно, что означает, что Write
некоторые потоки могут блокироваться. Однако экземпляры классов, таких как FileStream
и , NetworkStream
полностью поддерживают асинхронные операции, если экземпляры были открыты асинхронно. Поэтому вызовы не BeginWrite
будут блокироваться в этих потоках. Вы можете переопределить BeginWrite
(например, с помощью асинхронных делегатов), чтобы обеспечить асинхронное поведение.
Передайте объект , IAsyncResult
возвращенный текущим методом , в , EndWrite чтобы обеспечить надлежащее завершение записи и освобождение ресурсов. EndWrite должен вызываться один раз для каждого вызова BeginWrite. Это можно сделать с помощью того же кода, который вызвал BeginWrite
, или в обратном вызове, переданном в BeginWrite
. Если во время асинхронной записи возникает ошибка, исключение не будет создано до тех пор, пока EndWrite
не будет вызван с IAsyncResult
возвращаемым этим методом.
Если поток доступен для записи, запись в конце потока расширяет поток.
Текущая позиция в потоке обновляется при выполнении асинхронного чтения или записи, а не после завершения операции ввода-вывода. Несколько одновременных асинхронных запросов делают порядок завершения запроса неопределенным.
Используйте свойство , CanWrite чтобы определить, поддерживает ли текущий экземпляр запись.
Если поток закрыт или вы передаете недопустимый аргумент, исключения создаются немедленно из BeginWrite
. Ошибки, возникающие во время асинхронного запроса на запись, такие как сбой диска во время запроса ввода-вывода, происходят в потоке пула потоков и вызывают исключения при вызове EndWrite
.