async and await

Description

Conceitos e exemplos sobre as palavras-chave async e await
Thiago Russo
Flashcards by Thiago Russo, updated more than 1 year ago
Thiago Russo
Created by Thiago Russo over 8 years ago
4
0

Resource summary

Question Answer
QUAL/QUAIS PROBLEMA(S) Asynchronous code resolve? Qdo a app está executando uma operação de I/O, o SO percebe que a app está aguardando a conclusão da operação, como acesso a um arquivo na rede e isso pode custar tempo. Com isso, o Windows PAUSA sua Thread para q n use CPU Mas ainda utiliza memória e a Thread ñ pode ser reutilizada por outras requisições, precisando criar novas Threads
COMO Asynchronous code resolve os problemas? Ao invés de BLOQUEAR a Thread enquanto aguarda I/O, vc recebe um obj Task, com o resultado da operação assíncrona. Com Continuation Task, vc pode continuar o trabalho qdo o I/O terminar. Enquanto isso, a Thread está disponível para outros trabalhos. Qdo I/O acaba, o SO notifica o runtime e a Continuation Task é agendada p/ o pool de Threads.
async Marca o método p/ operações assíncronas, sinalizando p/ o processador q algo assíncrono vai acontecer nesse método. Um método marcado com async, começa a ser executado de forma síncrona na Thread atual. Ele PERMITE q o método possa ser DIVIDIDO em VÁRIAS PARTES. Os limites dessas partes são marcadas c/ AWAIT
await Com await, o compilador gera o código que irá verificar se a operação assíncrona está concluída. Se SIM, o método continua a execução de forma síncrona. Se NÃO, o state machine vai associar um método de continuação q deve ser executado qdo a Task for concluída. Com isso a Thread poderá ser reutilizada em outros trabalhos Await permite que vc escreva códigos que parece síncrono, mas que se comporta de forma assíncrona.
Exemplo async / await
async e await deixam para o compilador fazer a parte complexa async e await deixam para o compilador gerar código em passos precisos, pois escrever códigos assíncronos na mão é difícil.
Como await melhora a capacidade de resposta? Descarregando operações de longa duração em outras Threads deixando a aplicação cliente manter-se ágil, enquanto as operações são executadas em 2º plano Isso NÃO melhora o desempenho, mas MELHORA A CAPACIDADE DE RESPOSTA await tb garante q o restante do método usa a Thread de interface correta, para q vc possa atualizar/interagir c/ a interface de usuário
Exemplo de escalabilidade com await, utilizando Sleep
Exemplo de escalabilidade com await, utilizando FileStream FileStream expõe: WriteAsync e ReadAsync Eles não utilizam uma Thread enquanto estão à espera do Disco
Synchronization Context (SC) Liga o modelo da app ao modelo de Threads. Abstrai a forma que aplicações funcionam e garante que vc trabalhe na Thread correta qdo precisar atualizar algo na UI ou processar uma requisição web
Synchronization Context (SC): Utilizando await no WPF x Asp.Net await garante que o SC atual é salvo e restaurado qdo a Task for concluída. WCF => após a Task terminar, o prog continua na Thread do usuário. Ex: usa uma única Thread de UI e potencialmente mtas Threads em 2º plano, melhorando a cap. de resposta, distribuindo trabalho entre as CPU's Asp.Net => o restante do código é executado em uma Thread que tem culture, principal e + informações. Ex: usa o pool de Threads que são inicializados com esses dados.
Quando Desativar o Synchronization Context ? Talvez o código possa ser executado em qlq Thread, pq não precisa atualizar a UI qdo terminar. Neste caso, desativar o SC, o código será melhor executado.
Exemplo de desativar o Synchronization Context que gera Exception
Exemplo de desativar o Synchronization Context sem gerar Exception
async / await tipos de retorno - ao criar métodos async, é importante estabelecer o tipo de retorno Task ou Task<T> - Evite void, exceto quando for um event handler. Void é do tipo "despare e esqueça" e vc ñ poderá inspecionar o retorno e exceptions lançadas - Nunca crie métodos com async e sem await
Show full summary Hide full summary

Similar

Porova teórica C# mod l
Cursos Professor Jonatã
Linguagem C#
Alex Araujo Furado
Prova teorica C# mo ll
Cursos Professor Jonatã
Entity framework - code first
José Fernandes
Flashcard Módulo 1 - XAMARIN LATINO AMERICA
Marcone Barbosa
Entity framework
José Fernandes
C# and ASP.NET
Kalebi Fiorentini
Linguagens de programação
Rodrigo Barbosa7452
Conceitos do ASP.NET CORE (Incompleto)
José Fernandes Rezende Neto
Dates and times .NET
Felipe Couto Viola
Fluxo Game UC 8
Lucas Coluzzo