Stream.BeginRead(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 leitura assíncrona. (Considere o uso de ReadAsync(Byte[], Int32, Int32) em seu lugar.)
public:
virtual IAsyncResult ^ BeginRead(cli::array <System::Byte> ^ buffer, int offset, int count, AsyncCallback ^ callback, System::Object ^ state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback? callback, object? state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object state);
public virtual IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback callback, object? state);
abstract member BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
override this.BeginRead : byte[] * int * int * AsyncCallback * obj -> IAsyncResult
Public Overridable Function BeginRead (buffer As Byte(), offset As Integer, count As Integer, callback As AsyncCallback, state As Object) As IAsyncResult
Parâmetros
- buffer
- Byte[]
O buffer para ler os dados.
- offset
- Int32
O deslocamento de bytes no buffer
no qual será iniciada a gravação da leitura de dados no fluxo.
- count
- Int32
O número máximo de bytes a serem lidos.
- callback
- AsyncCallback
Um retorno de chamada assíncrono opcional, a ser chamado quando a leitura for concluída.
- state
- Object
Um objeto fornecido pelo usuário que distingue essa solicitação de leitura assíncrona específica de outras solicitações.
Retornos
Um IAsyncResult que representa a operação de leitura assíncrona, que ainda pode estar pendente.
Exceções
Tentativa de uma leitura assíncrona após o final do fluxo ou ocorre 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 leitura.
Comentários
No .NET Framework 4, e em versões anteriores, você precisa usar métodos como BeginRead e EndRead 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 você a implementar operações de E/S assíncronas com mais facilidade.
A implementação padrão de BeginRead
em um fluxo chama o Read método de forma síncrona, o que significa que Read
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 BeginRead
não serão bloqueadas nesses fluxos. Você pode substituir BeginRead
(usando delegados assíncronos, por exemplo) para fornecer comportamento assíncrono.
Passe o IAsyncResult
valor retornado para o EndRead método do fluxo para determinar quantos bytes foram lidos e liberar recursos do sistema operacional usados para leitura. EndRead deve ser chamado uma vez para cada chamada para BeginRead. Você pode fazer isso usando o mesmo código que chamou BeginRead
ou em um retorno de chamada passado para BeginRead
.
A posição atual no fluxo é atualizada quando a leitura ou gravação assíncrona é emitida, 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 CanRead propriedade para determinar se a instância atual dá suporte à leitura.
Se um fluxo for fechado ou você passar um argumento inválido, as exceções serão lançadas imediatamente de BeginRead
. Erros que ocorrem durante uma solicitação de leitura 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 EndRead
.