Entenda o ConfigureAwait: Otimize a Performance Async
Transformações em IL: A mecânica dos métodos async C#
Quando escrevemos métodos assíncronosComo Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. em C#, utilizamos palavras-chave como async
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. await
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.. No entanto, por trás desse modelo
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. de programação, há um processo de tradução do código-fonte em uma forma intermediária conhecida como CIL (Common Intermediate Language), também chamada simplesmente de IL. Esse passo é fundamental para permitir que o .NET consiga orquestrar as chamadas assíncronas de maneira eficiente e transparente para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! o desenvolvedor.
Neste tutorial, vamos narrar como o compilador C# transforma seus métodos assíncronosComo Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. em IL, a fim de deixar claro por que essa etapa intermediária é tão importante para o funcionamento correto dos programas assíncronos.
O que é IL (Intermediate Language)?🔗
- IL é uma linguagem intermediária usada pelo .NET.
- Todo código C#, ao ser compilado, se transforma primeiro em IL, e só então
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. é convertido em instruções de máquina específicas de cada ambiente (por exemplo, x86 ou x64).
- A grande vantagem disso é que o .NET pode realizar diversas otimizações, como just-in-time
Desmistificando a ausência do JIT: Compatibilidade e cenários de uso real em Native AOTDescubra como o Native AOT no .NET elimina o JIT, garantindo startup ultrarrápido e desempenho otimizado, apesar das limitações na geração dinâmica de código. compilation (JIT), e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. manter a portabilidade entre diferentes sistemas operacionais.
No caso de métodos assíncronosComo Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance., o IL gerado não é apenas uma tradução simples do que você escreveu em C#. Na verdade, o compilador cria estruturas especiais que gerenciam o estado da execução do método. Esses artefatos internos, no IL, são responsáveis por marcar o ponto onde a execução deve continuar quando um await
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. é concluído, entre outras funções
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. de coordenação.
As Transformações de Código para Métodos Assíncronos🔗
public async Task MeuMetodoAsync()
{
await Task.Delay(1000);
Console.WriteLine("Operação concluída!");
}
O compilador C# faz uma série de transformações para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! gerar o IL correspondente. Em termos simples:
1. Criação de uma estrutura de Estado
O compilador cria uma estrutura (ou classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara.) de estado que mantém informações sobre o ponto de execução do método. No código IL, essa estrutura gerada será responsável por armazenar variáveis
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. locais e lidar com a lógica de reentrada (aquele “ponto de suspensão” do método após o
await
).⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.
2. Divisão🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. do método em estados
O método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. será particionado em blocos de código, cada um representando um estado diferente. Se você tiver múltiplas operações assíncronas
Entity Framework e Async/Await: Lidando com Consultas ao Banco de DadosAprenda a utilizar async/await com Entity Framework para melhorar a escalabilidade, responsividade e performance em consultas e operações de dados. dentro de um mesmo método, cada uma delas pode corresponder a um “estado” distinto dentro da lógica de IL.
Essa é uma das partes mais características: o compilador gera um método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.
MoveNext
(métodoAsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.()
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. interno na estrutura de estado) que fica responsável por avançar de um estado para outro. Quando o
await
finaliza a tarefa⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes., o .NET chama
MoveNext
novamente para retomar a execução do ponto em que o métodoAsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.()
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. foi “pausado”.
4. Uso de IL_
labels
Se olharmos o IL resultante, veremos que existem vários labels, como IL_0001
, IL_0002
, entre outros, apontando para diferentes locais de salto. Assim, o compilador cria uma espécie de “máquina de estadosAsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.” embutida, coordenada por esses rótulos.
Por que o IL é Importante nesse Processo?🔗
- Separação de Concerns: O C# oferece uma sintaxe intuitiva composta por
async/await
. Contudo, toda a lógica “complicada” de como retomar a execução de um método⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. pausado fica no IL.
- Portabilidade: Por estar em IL, o mesmo binário poderá rodar em diferentes plataformas, e o JIT (Just-In-Time Compiler) pode otimizar o método assíncrono
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. conforme necessário.
- Depuração
💡 Debugging Básico: Como Encontrar Erros sem Chorar no Cantinho!Descubra como identificar e corrigir erros em código com técnicas de debugging testadas. Dicas práticas para um desenvolvimento mais eficaz. e Ferramentas: Muitas das ferramentas de diagnóstico do .NET analisam o IL para indicar em qual estado o método assíncrono
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. se encontra. Quando usamos um debugger, o .NET precisa correlacionar os pontos do IL com as linhas do código-fonte em C#.
Visão Simplificada do Fluxo em IL🔗
Para ilustrar de forma visual como o compilador “quebra” um método assíncronoComo Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. em partes, poderíamos imaginar algo assim:
- Início do Método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.: Quando o método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. é chamado, o .NET instancia ou utiliza a estrutura gerada, definindo qual o estado inicial.
- StateMachine Criação: Uma state machine
AsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente. (máquina de estado
AsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.) é configurada.
- MoveNext
AsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.: Método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. especial que “move” a execução para o próximo estado.
- Await
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. - Estado 1: Se o código encontrar um
await
, ele faz a chamada assíncrona⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. e “pausa” o fluxo.
- Retorna ao Chamador: Enquanto
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! a tarefa não é concluída, o método retorna ao chamador (sem travá-lo). Quando a tarefa termina, um callback chama novamente
MoveNext
.AsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.
- Operação Concluída: Quando todas as partes do método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. terminam, o estado final é atingido.
Acima temos apenas uma representação📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. conceitual. No IL real, haveria diversos rótulos (
IL_xxxx
) e instruções específicas indicando para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! onde o fluxo do programa deve prosseguir.
Pequeno Exemplo em IL (Simplificado)🔗
Vamos ver um trecho hipotético e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. simplificado (não é exatamente o IL verdadeiro) de como um método assíncrono
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. poderia ser representado. Observe que esse é apenas um exemplo ilustrativo:
// Método em C#
public async Task SomarComDelayAsync(int a, int b)
{
await Task.Delay(1000);
int resultado = a + b;
Console.WriteLine("Resultado = " + resultado);
}
Abaixo, um pseudo-IL comentado:
// A estrutura de estado gerada pelo compilador (Simplificado):
.class nested private auto ansi sealed beforefieldinit
SomarComDelayAsyncStateMachine
extends [System.Runtime]System.ValueType
{
.field public int32 <>1__state // Armazena o "estado" atual
.field public AsyncTaskMethodBuilder <>t__builder
.field public int32 a
.field public int32 b
.field private TaskAwaiter <>u__1 // Armazena o awaiter (retorno do await)
// Método que avança de estado para estado
.method public hidebysig
instance void MoveNext() cil managed
{
.maxstack 2
.locals init (...)
// IL_0000: checa o estado atual
// IL_0007: se estado == 0, pular para IL_xxxx
// ...
//
// Estado 0: chama Task.Delay(1000)
// configura o awaiter e retorna
//
// Estado 1: retoma a execução aqui após Delay
// int resultado = a + b;
// Console.WriteLine(...)
// ...
}
}
- MoveNext
AsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.() armazena a sequência de instruções para cada estado. Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. acontece o
await
, o estado é atualizado, e o método⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais.
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. retorna antes de continuar.
- taskAwaiter (aqui representado como
<>u__1
) é a variável🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. que guarda o objeto awaiter
Awaiters Personalizados: Criando Implementações sob MedidaDescubra como criar Awaiters personalizados em C# para otimizar o controle do fluxo assíncrono, implementando e customizando a interface INotifyCompletion. (por exemplo, aquele retornado por
Task
).Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho..Delay(1000).GetAwaiter()
Apesar de ser apenas um esboço, essa demonstração serve para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! evidenciar que, no fim das contas, uma estrutura de estado e o método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.
MoveNext
são centrais para a forma como o compilador implementa a lógica assíncronaAsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente.()
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. em IL.
Conclusão🔗
No momento em que você declara um método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. com async
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. usa await
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais., o C# faz um trabalho considerável para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! transformar as instruções em uma máquina de estados
AsyncStateMachine: Explorando a Geração de Código pelo CompiladorDescubra como o compilador C# implementa a AsyncStateMachine para gerenciar o fluxo de métodos async/await e manter o contexto de execução de forma eficiente. no IL. Esse mecanismo é invisível na maior parte do tempo, mas é ele quem garante que o seu código rode de maneira assíncrona
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. sem bloquear a aplicação.
- IL atua como o _“código de bastidores”_ que possibilita ao .NET criar métodos assíncronos
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. usando a síntese de máquinas de estado.
- Métodos async
Como Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance. são partidos em blocos, cada um mapeado em um estado específico.
- Chamadas await
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. geram toda a lógica necessária para suspender e retomar o procedimento, apenas quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. a tarefa está pronta.
Entender esse processo ajuda a enxergar de que forma o compilador C# realmente executa o trabalho para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! você, e por que otimizações e depurações aprofundadas dependem tanto de como o IL se apresenta.
Dica: Quando quiser investigar em detalhes, utilize ferramentas como o ILSpy ou o dnSpy para ver como o seu método assíncrono é transformado em IL. Você verá na prática os rótulos, a máquina de estado e o método MoveNext()
sendo gerados.
Com isso, finalizamos a explicação sobre a importância do IL em métodos assíncronosComo Funciona o Operador 'await' e o que Significa 'async' nos MétodosAprenda a usar async e await em C# para processar tarefas demoradas sem bloquear sua aplicação. Torne o código legível e eficiente, melhorando a performance.. Esperamos que o papel crucial dessa linguagem intermediária tenha ficado mais claro, mostrando que async/await
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. é muito mais do que uma simples sintaxe: é suporte de primeira classe do compilador, impulsionado por estruturas internas do IL para gerenciar a execução assíncrona
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais. de forma fluida e escalável
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos..
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do .NET sobre programação assíncrona. Essa referência é pertinente, pois fornece o embasamento teórico e prático sobre async/await, complementando a discussão sobre como o CIL (IL) é utilizado na implementação de métodos assíncronos: learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async