Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Inicia uma operação de gravação assíncrona. (Considere o uso de WriteAsync(Byte[], Int32, Int32) em seu lugar.)
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
Parâmetros
- buffer
- Byte[]
O buffer do qual os dados serão gravados.
- offset
- Int32
O deslocamento de bytes no buffer
no qual a gravação deve iniciar.
- count
- Int32
O número máximo de bytes a serem gravados.
- callback
- AsyncCallback
Um retorno de chamada assíncrona opcional, a ser chamada quando a operação de gravação for concluída.
- state
- Object
Um objeto fornecido pelo usuário que distingue essa solicitação de gravação assíncrona específica de outras solicitações.
Retornos
Um IAsyncResult
que representa a gravação assíncrona, que ainda pode estar pendente.
Exceções
Houve uma tentativa de gravação assíncrona após o final do fluxo ou ocorreu um erro de disco.
Um ou mais argumentos são inválidos.
Foram chamados métodos depois que o fluxo foi fechado.
A implementação Stream
atual não dá suporte à operação de gravação.
Comentários
No .NET Framework 4, e em versões anteriores, você precisa usar métodos como BeginWrite e EndWrite para implementar operações de E/S assíncronas. Esses métodos ainda estão disponíveis no .NET Framework 4.5 para dar suporte ao código herdado; no entanto, os novos métodos assíncronos, como ReadAsync, WriteAsync, CopyToAsynce FlushAsync, ajudam a implementar operações de E/S assíncronas com mais facilidade.
A implementação padrão de BeginWrite
em um fluxo chama o Write método de forma síncrona, o que significa que Write
pode bloquear em alguns fluxos. No entanto, instâncias de classes como FileStream
e NetworkStream
dão suporte total a operações assíncronas se as instâncias tiverem sido abertas de forma assíncrona. Portanto, as chamadas para BeginWrite
não serão bloqueadas nesses fluxos. Você pode substituir BeginWrite
(usando delegados assíncronos, por exemplo) para fornecer comportamento assíncrono.
Passe o IAsyncResult
retornado pelo método atual para para EndWrite garantir que a gravação seja concluída e libere os recursos adequadamente. EndWrite deve ser chamado uma vez para cada chamada para BeginWrite. Você pode fazer isso usando o mesmo código que chamou BeginWrite
ou em um retorno de chamada passado para BeginWrite
. Se ocorrer um erro durante uma gravação assíncrona, uma exceção não será gerada até EndWrite
que seja chamada com o IAsyncResult
retornado por esse método.
Se um fluxo for gravável, gravar no final do fluxo expandirá o fluxo.
A posição atual no fluxo é atualizada quando você emite a leitura ou gravação assíncrona, não quando a operação de E/S é concluída. Várias solicitações assíncronas simultâneas tornam a ordem de conclusão da solicitação incerta.
Use a CanWrite propriedade para determinar se a instância atual dá suporte à gravação.
Se um fluxo for fechado ou você passar um argumento inválido, as exceções serão lançadas imediatamente de BeginWrite
. Erros que ocorrem durante uma solicitação de gravação assíncrona, como uma falha de disco durante a solicitação de E/S, ocorrem no thread do pool de threads e geram exceções ao chamar EndWrite
.