Summary
Keywords
Full Transcript
Playlist: Curso Grátis de FLUTTER e DART Completo https://www.youtube.com/playlist?list=PL5EmR7zuTn_aX0pG4oWTyKKQT25Hkq2XG Programação assíncrona: future e async-await O código de dart é executado em um único "encadeamento" de execução. Código que bloqueia o segmento de execução pode congelar seu programa. Objetos futuros (futuros) representam os resultados de operações assíncronas - processamento ou E / S a serem concluídas posteriormente. Para suspender a execução até que um futuro seja concluído, use o wait em uma função assíncrona. Para capturar erros, use expressões try-catch em funções assíncronas. Para executar o código simultaneamente, crie um isolado (ou para um aplicativo da Web, um trabalhador). O código de dardos é executado em um único "encadeamento" de execução. Se o código de dardos bloquear - por exemplo, executando um cálculo de longa duração ou esperando por E / S - o programa inteiro congela. As operações assíncronas permitem que o seu programa conclua outro trabalho enquanto aguarda a conclusão de uma operação. O Dart usa objetos Future (futuros) para representar os resultados de operações assíncronas. Para trabalhar com futuros, você pode usar o async e o await ou o Future API. Nota: Todo o código Dart é executado no contexto de um isolado que possui toda a memória que o código Dart usa. Enquanto o código Dart está sendo executado, nenhum outro código no mesmo isolado pode ser executado. Se você quiser que várias partes do código Dart sejam executadas simultaneamente, você pode executá-las em isolados separados. (Os aplicativos da Web usam trabalhadores em vez de isolados.) Vários isolados são executados ao mesmo tempo, geralmente cada um em seu próprio núcleo de CPU. Os isolados não compartilham memória e a única maneira de interagir é enviando mensagens uns para os outros. Para mais informações, consulte a documentação de isolados ou web workers. Introdução Vejamos alguns códigos que podem causar o congelamento de um programa: // Código síncrono void printDailyNewsDigest () { var newsDigest = gatherNewsReports (); // Pode demorar um pouco. imprimir (newsDigest); } a Principal() { printDailyNewsDigest (); printWinningLotteryNumbers (); printWeatherForecast (); printBaseballScore (); } Nosso programa reúne as notícias do dia, imprime e imprime um monte de outros itens de interesse para o usuário: Números de loteria vencedores: [23, 63, 87, 26, 2] Previsão de amanhã: 70F, ensolarado. Pontuação de beisebol: Red Sox 10, Yankees 0 Nosso código é problemático: desde os blocos gatherNewsReports (), o código restante é executado somente depois que gatherNewsReports () retorna com o conteúdo do arquivo, não importa quanto tempo demore. Se a leitura do arquivo demorar muito, o usuário terá que esperar, perguntando se ganhou na loteria, qual será o tempo de amanhã e quem ganhou o jogo de hoje. Para ajudar a manter o aplicativo responsivo, os autores da biblioteca Dart usam um modelo assíncrono ao definir funções que fazem um trabalho potencialmente caro. Tais funções retornam seu valor usando um futuro. O que é um futuro? Um futuro é um objeto Future MENOR T MAIOR, que representa uma operação assíncrona que produz um resultado do tipo T. Se o resultado não for um valor utilizável, o tipo do futuro será Future MENOR void MAIOR. Quando uma função que retorna um futuro é invocada, duas coisas acontecem: A função enfileira o trabalho a ser feito e retorna um objeto Future não concluído. Posteriormente, quando a operação for concluída, o objeto Futuro será concluído com um valor ou com um erro. Ao escrever código que depende de um futuro, você tem duas opções: Use async e aguarde Use a API do futuro Assíncrono e aguardar As palavras-chave async e await fazem parte do suporte de assincronia da linguagem Dart. Eles permitem que você crie um código assíncrono que se parece com um código síncrono e não usa a Future API. Uma função assíncrona é aquela que tem a palavra-chave async antes de seu corpo. A palavra-chave await funciona apenas em funções assíncronas. Nota de versão: No Dart 1.x, as funções assíncronas imediatamente suspenderam a execução. No Dart 2, em vez de suspender imediatamente, as funções assíncronas são executadas de forma síncrona até que o primeiro aguarde ou retorne. O aplicativo a seguir simula a leitura das notícias usando async e aguarda para ler o conteúdo de um arquivo neste site. Clique em executar para iniciar o aplicativo. Ou abra uma janela do DartPad contendo o aplicativo, execute o aplicativo e clique em CONSOLE para ver a saída do aplicativo. Observe que printDailyNewsDigest () é a primeira função chamada, mas a notícia é a última coisa a imprimir, mesmo que o arquivo contenha apenas uma única linha. Isso ocorre porque o código que lê e imprime o arquivo está sendo executado de forma assíncrona.
