Programação assíncrona

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

Usar a programação assíncrona permite que seu aplicativo permaneça responsivo quando ele realiza trabalhos que podem levar uma grande quantidade de tempo. Por exemplo, um aplicativo que baixa conteúdo da Internet pode passar diversos segundos aguardando a chegada do conteúdo. Se você usar um método síncrono no thread de IU para recuperar o conteúdo, o aplicativo ficará bloqueado até que o método retorne. O aplicativo não responderá à interação do usuário e, como ele parecerá não responsivo, o usuário poderá ficar frustrado. Uma maneira muito melhor é usar a programação assíncrona, na qual o aplicativo continua a ser executado e a responder à IU enquanto aguarda a conclusão de uma operação.

Nos métodos que podem levar mais 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 de 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 tiver retornado ao chamador.

Quando você usa APIs assíncronas no seu aplicativo Plataforma Universal do Windows (UWP), o código faz chamadas não bloqueadoras de maneira consistente. Quando você implementa esses padrões assíncronos em suas definições de API, os chamadores reconhecem e usam seu código de forma previsível.

Aqui estão algumas tarefas comuns que exigem a chamada de APIs assíncronas Windows Runtime.

  • Exibição de uma caixa de diálogo de mensagem

  • Trabalhar com o arquivo do sistema, 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 arquivos como abrir arquivos em formato PDF (Portable Document Format) ou decodificar formatos de imagem ou mídia

  • Interagir com um dispositivo ou serviço

Com um padrão assíncrono UWP, você pode evitar explicitamente gerenciar todos os threads de uma só vez. Cada linguagem de programação dá suporte ao padrão assíncrono para a UWP em sua maneira específica:

Linguagem de programação Representação assíncrona
C# operador assíncrono palavra-chave, await
Visual Basic Palavra-chave Async, operador Await
C++/WinRT corrotina e operador co_await
C++/CX classe task, método .then
JavaScript objeto promise, função then

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

Um segmento típico de código gravado em C# ou em Visual Basic é executado de forma síncrona. Isso significa que, quando você executa uma linha, ela termina antes da execução da próxima linha. Havia modelos de programação Microsoft .NET anteriores para execução assíncrona, porém, o código resultante tende a enfatizar a mecânica de execução do código assíncrono em vez de focar na tarefa que o código está tentando realizar. Os compiladores da UWP, do .NET framework, e do C# Visual Basic adicionaram recursos que reduzem a mecânica assíncrona fora do seu código. Para .NET e a UWP, você pode gravar o código assíncrono que focaliza o que o seu código faz em vez de como e quando fazê-lo. Seu código assíncrono parecerá razoavelmente similar ao código síncrono. Para saber mais, veja Chamar APIs assíncronas em C# ou Visual Basic.

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

Com 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 no C++/WinRT.

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

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

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

Padrões assíncronos em UWP usando JavaScript

No JavaScript, a programação assíncrona segue o padrão proposto Common JS Promises/A ao ter métodos assíncronos retornando objetos promise. As promessas são usadas na UWP e na Biblioteca do Windows para JavaScript.

Um objeto promise representa um valor que será preenchido no futuro. Na UWP, você obtém um objeto promise a partir de uma função factory, cujo nome por convenção termina com "Async".

Em muitos casos, chamar uma função assíncrona é quase tão simples quando 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.