Partilhar via


Visão geral da programação assíncrono

Uma operação assíncrono que utiliza o IAsyncResult padrão de design é implementada sistema autônomo dois métodos chamados ComeçarOperationName e participanteOperationName que começam e terminam a operação assíncrono OperationName respectivamente.Por exemplo, a FileStream classe fornece o BeginRead e EndRead métodos para ler bytes assíncrona de um arquivo. Esses métodos implementam a versão assíncrono do Read método.

Depois de chamar ComeçarOperationName, um aplicativo pode continuar executando as instruções no thread de chamada, enquanto a operação assíncrono ocorre em um thread diferente.Cada telefonar para ComeçarOperationName, o aplicativo também deve chamar participanteOperationName para obter os resultados da operação.

Começando uma operação assíncrono

The ComeçarMétodo de OperationName começa a operação assíncrono OperationName e retorna um objeto que implementa o IAsyncResult interface. IAsyncResult objetos armazenam informações sobre uma operação assíncrono. A tabela a seguir mostra informações sobre uma operação assíncrono.

Membro

Descrição

AsyncState

Um objeto específico do aplicativo opcional que contém informações sobre a operação assíncrono.

AsyncWaitHandle

A WaitHandle que pode ser usado para bloquear a execução de aplicativos até que a operação assíncrono for concluída.

CompletedSynchronously

Um valor que indica se a operação assíncrono foi concluída no thread usado para chamar ComeçarOperationName em vez de conclusão em uma separada ThreadPool segmento.

IsCompleted

Um valor que indica se a operação assíncrono foi concluída.

A ComeçarMétodo de OperationName usa declarados na assinatura da versão síncrono do método quaisquer parâmetros passados por valor ou referência.Quaisquer parâmetros de saída não fazem parte do ComeçarAssinatura do método OperationName.The ComeçarAssinatura do método OperationName também inclui dois parâmetros adicionais.O primeiro define um AsyncCallback delegado que referencia um método que é chamado quando a operação assíncrono for concluída. O chamador pode especificar null (Nothing no Visual Basic) se não desejar um método chamado quando a operação for concluída. O segundo parâmetro adicional é um objeto definido pelo usuário.Este objeto pode ser usado para passar informações de estado específicos do aplicativo para o método chamado quando a operação assíncrono for concluída.If a ComeçarMétodo de OperationName usa parâmetros específicos de operação adicionais, sistema autônomo, por exemplo, uma matriz de byte para armazenar sistema autônomo byte lidos de um arquivo, a AsyncCallback e o objeto de estado do aplicativo são sistema autônomo parâmetros no últimos a ComeçarAssinatura do método OperationName.

BeginOperationName devolve o controle para o segmento chamado imediatamente.Se o ComeçarOperationName método lança exceções, as exceções são lançadas antes da operação assíncrono for iniciada.Se o ComeçarOperationName método lança exceções, o método de retorno de chamada não é invocado.

Encerrando uma operação assíncrono

The participanteMétodo de OperationName termina a operação assíncrono OperationName.O valor retornado do participanteMétodo de OperationName é do mesmo tipo retornado pela sua contraparte assíncrono e específico para a operação assíncrono.Por exemplo, a EndRead método retorna o número de bytes lidos a partir de um FileStream e o EndGetHostByName método retorna um IPHostEntry objeto que contém informações sobre um computador host. The participanteOperationName método leva qualquer check-out ou ref parâmetros declarados na assinatura da versão síncrono do método.Juntamente com os parâmetros do método síncrono, a participanteMétodo de OperationName também inclui um IAsyncResult parâmetro. Os chamadores devem passar a instância retornada pela telefonar correspondente para ComeçarOperationName.

Se a operação assíncrono é representado pelo IAsyncResult objeto não foi concluída quando participanteChamado OperationName , participanteOperationName bloqueia o segmento de chamada até que a operação assíncrono seja concluída.Exceções lançadas por operação assíncrono são lançadas do participanteMétodo de OperationName.O efeito de chamar o participanteMétodo de OperationName várias vezes com o mesmo IAsyncResult não foi definido. Da mesma forma, chamar o participanteMétodo de OperationName com um IAsyncResult que não retornou a começar relacionada método também não está definido.

Observação:

Para qualquer um dos cenários indefinidos, implementadores devem considerar a lançar InvalidOperationException.

Observação:

Implementadores desse padrão de design devem notificar o chamador que a operação assíncrono concluída, definindo IsCompleted como true, chamando o método de retorno de chamada assíncrono (se foi especificado) e sinalização de AsyncWaitHandle.

aplicativo desenvolvedores tem várias opções de design para acessar os resultados da operação assíncrono.A escolha correta depende se o aplicativo tem instruções que podem ser executados enquanto a operação é concluída.Se um aplicativo não pode executar qualquer trabalho adicional até receber os resultados da operação assíncrono, o aplicativo deve bloco até que os resultados estejam disponível.Para bloco até que uma operação assíncrono seja concluída, você pode usar uma das seguintes abordagens:

Os aplicativos que não precisam ser bloqueados enquanto a operação assíncrono for concluída podem usar uma das seguintes abordagens:

Consulte também

Conceitos

Chamando métodos síncrono assincronamente

Usando um delegado AsyncCallback e um objeto de estado

Outros recursos

Padrões de design de programação assíncrono