Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) Método

Definição

Inicia uma operação de leitura assíncrona. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.)

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);
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 em buffer que começar a escrever dados lidos do fluxo.

count
Int32

O número máximo de bytes a ler.

callback
AsyncCallback

Um callback assíncrono opcional, a ser chamado quando a leitura estiver completa.

state
Object

Um objeto fornecido pelo utilizador que distingue este pedido de leitura assíncrono particular de outros pedidos.

Devoluções

Um IAsyncResult que representa a leitura assíncrona, que ainda pode estar pendente.

Exceções

Tentou uma leitura assíncrona para além do fim do fluxo, ou ocorre um erro de disco.

Um ou mais dos argumentos são inválidos.

Os métodos foram chamados após o encerramento do riacho.

A implementação atual Stream não suporta a operação de leitura.

Observações

No .NET Framework 4 e versões anteriores, é necessário usar métodos como BeginRead e EndRead para implementar operações de E/S assíncronas. Estes métodos ainda estão disponíveis no .NET Framework 4.5 para suportar código legado; no entanto, os novos métodos assíncronos, como ReadAsync, WriteAsync, CopyToAsync e FlushAsync, ajudam a implementar operações de E/S assíncronas mais facilmente.

A implementação padrão de BeginRead on a stream chama o Read método de forma síncrona, o que significa que pode Read bloquear em alguns streams. No entanto, instâncias de classes como FileStream e NetworkStream suportam totalmente operações assíncronas se as instâncias tiverem sido abertas assíncronas. Portanto, as chamadas para BeginRead não bloqueiam nesses fluxos. Pode sobrescrever BeginRead (usando delegados assíncronos, por exemplo) para fornecer comportamento assíncrono.

Passar o IAsyncResult valor de retorno ao EndRead método do fluxo para determinar quantos bytes foram lidos e libertar os recursos do sistema operativo usados para leitura. EndRead deve ser chamada uma vez por cada chamada para BeginRead. Pode fazer isto usando o mesmo código que chamou BeginRead ou num callback passado para BeginRead.

A posição atual no fluxo é atualizada quando a leitura ou escrita assíncrona é emitida, não quando a operação de I/O termina.

Múltiplos pedidos assíncronos simultâneos tornam a ordem de conclusão do pedido incerta.

Use a CanRead propriedade para determinar se a instância atual suporta leitura.

Se um fluxo estiver fechado ou se passar um argumento inválido, exceções são lançadas imediatamente a partir de BeginRead. Erros que ocorrem durante um pedido de leitura assíncrono, como uma falha de disco durante o pedido de E/S, ocorrem no thread pool de threads e lançam exceções ao chamar EndRead.

Aplica-se a

Ver também