Compartilhar via


Programação assíncrona

Este tópico descreve a programação assíncrona na Plataforma Universal do Windows (UWP) e sua representação em C#, Microsoft Visual Basic .NET, C++ e JavaScript.

O uso da programação assíncrona ajuda seu aplicativo a permanecer responsivo quando ele faz um trabalho que pode levar um longo período de tempo. Por exemplo, um aplicativo que baixa conteúdo da Internet pode passar vários segundos aguardando a chegada do conteúdo. Se você usou um método síncrono no thread da interface do usuário para recuperar o conteúdo, o aplicativo será bloqueado até que o método retorne. O aplicativo não responde à interação do usuário e, como parece não responder, o usuário pode ficar frustrado. Uma maneira muito melhor é usar a programação assíncrona, em que o aplicativo continua a ser executado e responder à interface do usuário enquanto aguarda a conclusão de uma operação.

Para métodos que podem levar muito tempo para serem concluídos, a programação assíncrona é a norma e não a exceção na UWP. JavaScript, C#, Visual Basic e C++ fornecem suporte à linguagem para métodos assíncronos.

Programação assíncrona na UWP

Muitos recursos UWP, como as APIs MediaCapture e as APIs StorageFile, são expostos como APIs assíncronas. Por convenção, os nomes das APIs assíncronas terminam com "Async" para indicar que parte de sua execução provavelmente ocorrerá depois que o controle retornar ao chamador.

Quando você usa APIs assíncronas em seu aplicativo UWP (Plataforma Universal do Windows), seu código faz chamadas sem bloqueio de maneira consistente. Quando você implementa esses padrões assíncronos em suas próprias definições de API, os chamadores podem entender e usar seu código de maneira previsível.

Aqui estão algumas tarefas comuns que exigem a chamada de APIs assíncronas do Tempo de Execução do Windows.

  • Exibindo uma caixa de diálogo de mensagem

  • Trabalhando com o sistema de arquivos, exibindo um seletor de arquivos

  • Envio e recebimento de dados de e para a Internet

  • Usando soquetes, fluxos, conectividade

  • Trabalhando com compromissos, contatos, calendário

  • Trabalhar com tipos de arquivo, como abrir arquivos PDF (Portable Document Format) ou decodificar formatos de imagem ou mídia

  • Interagindo com um dispositivo ou serviço

Com o padrão assíncrono UWP, você pode evitar o gerenciamento explícito de threads. Cada linguagem de programação dá suporte ao padrão assíncrono para a UWP à sua maneira:

Linguagem de programação Representação assíncrona
C# palavra-chave assíncrona, operador de espera
Visual Basic Palavra-chave assíncrona, operador Await
C++/WinRT corrotina e co_await operador
C++/CX classe de tarefa, método .then
JavaScript promise e, em seguida, function

Padrões assíncronos na UWP usando C# e Visual Basic

Um segmento típico de código escrito em C# ou Visual Basic é executado de forma síncrona, o que significa que, quando uma linha é executada, ela termina antes que a próxima linha seja executada. Houve modelos de programação anteriores do Microsoft .NET para execução assíncrona, mas o código resultante tende a enfatizar a mecânica de execução de código assíncrono em vez de se concentrar na tarefa que o código está tentando realizar. A UWP, o .NET Framework e os compiladores C# e Visual Basic adicionaram recursos que abstraem a mecânica assíncrona do seu código. Para o .NET e a UWP, você pode escrever código assíncrono que se concentra no que seu código faz, em vez de como e quando fazê-lo. Seu código assíncrono será razoavelmente semelhante ao código síncrono. Para obter mais informações, consulte Chamar APIs assíncronas em C# ou Visual Basic.

Padrões assíncronos na UWP com C++/WinRT

Com o C++/WinRT, você usa corrotinas e o operador co_await . Para obter mais informações e exemplos de código, consulte Programação assíncrona em C++/WinRT.

Padrões assíncronos na UWP com C++/CX

Em C++/CX, a programação assíncrona é baseada na classe de tarefa e em seu método then. A sintaxe é semelhante à das promessas JavaScript. A classe de tarefa e seus tipos relacionados também fornecem a capacidade de cancelamento e gerenciamento do contexto de thread. Para obter mais informações, consulte Programação assíncrona em C++/CX.

A função create_async fornece suporte para a produção de APIs assíncronas que podem ser consumidas do JavaScript ou de qualquer outra linguagem que dê suporte à UWP. Para obter mais informações, consulte Criando operações assíncronas em C++/CX.

Padrões assíncronos na UWP usando JavaScript

Em JavaScript, a programação assíncrona segue o padrão proposto Common JS Promises/A , fazendo com que os métodos assíncronos retornem objetos de promessa. As promessas são usadas na UWP e na Biblioteca do Windows para JavaScript.

Um objeto de promessa representa um valor que será cumprido no futuro. Na UWP, você obtém um objeto de promessa de uma função de fábrica, que, por convenção, tem um nome que termina com "Async".

Em muitos casos, chamar uma função assíncrona é quase tão simples quanto chamar uma função convencional. A diferença é que você usa o método then ou done para atribuir os manipuladores para resultados ou erros e para iniciar a operação.