1
resposta

Uso do GetAwaiter() (C#: Paralelismo no mundo real)

No curso de paralelismo, pude ver o funcionamento de Async / await. Porém implementando um método síncrono (sem async nem Task) encontrei a opção

.GetAwaiter().GetResult();

Frente ao que foi abordado no curso, sobre a distribuição da carga para os processadores, como é o comportamento quando uso .GetAwaiter().GetResult() tornando um médo comum capaz de chamar um método async?

Obrigado

Ps: No fórum não tem como víncular a pergunta ao curso C#: Paralelismo no mundo real

1 resposta

Olá, Matheus, tudo bem?

Desde já peço desculpas pela demora em obter retorno.

Quando você usa .GetAwaiter().GetResult() em um método síncrono para chamar um método assíncrono, você está efetivamente bloqueando a thread atual até que o método assíncrono seja concluído. Isso significa que a execução será suspensa até que o método assíncrono retorne o resultado ou lance uma exceção.

No entanto, é importante ter cuidado ao utilizar essa abordagem, pois quando você bloqueia a thread usando .GetAwaiter().GetResult(), você está essencialmente tornando o código síncrono, perdendo a capacidade de aproveitar os recursos de processamento paralelo.

Uma alternativa mais recomendada é utilizar o async/await diretamente no método síncrono, transformando-o em um método assíncrono. Dessa forma, você pode aproveitar os benefícios do paralelismo, permitindo que outras tarefas sejam executadas enquanto aguarda a conclusão do método assíncrono.

Todavia, vale ressaltar que como você postou sua pergunta há algum tempo é possível que a constante evolução da tecnologia impacte na resolução da sua dúvida. Sendo assim, caso queira se aprofundar neste tema e com conteúdos atualizados, recomendo a documentação abaixo:

Ela está em inglês, mas você pode usar o recurso de tradução automática do navegador.

Espero ter ajudado.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software