Depurando Código Assíncrono: Técnicas de Logs e Exceções
Guia Prático: Transformando Código Síncrono em Assíncrono
Transformar um código síncrono em assíncrono⚡ 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. é um processo que requer planejamento, entendimento da arquitetura do sistema e ajustes cuidadosos em cada etapa. Neste tutorial, você vai aprender, de forma narrativa e prática, como identificar trechos de código que devem ser convertidos e como refatorá-los para utilizar o modelo
async/await
em C#. Vamos passo a passo:⚡ 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.
Motivação e Preparação🔗
Antes de começar a refatorar, é importante entender por que usar código assíncrono⚡ 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.:
- Responsividade
Xamarin/MAUI com Async/Await: Interface Responsiva para Aplicativos MóveisAprenda a implementar Async/Await em Xamarin/MAUI e mantenha sua UI responsiva. Tutorial com dicas, exemplos e práticas para apps mobile.: Aplicações de interface gráfica ou web podem ficar bloqueadas durante operações custosas, como consultas a banco de dados ou chamadas de API externas. O código assíncrono libera essas interfaces, oferecendo uma experiência
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! mais fluida.
- Escalabilidade
📡 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.: Em cenários
📊 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. de alto volume de requisições, usar
async/await
pode reduzir o consumo de threads e melhorar significativamente o desempenho⚡ 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.
⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs..
- Melhor uso de recursos
📡 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.: Operações de I/O (leitura/gravação de arquivos ou rede) ocupam a thread durante o tempo de espera. Com o modelo assíncrono
⚡ 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., esse tempo pode ser melhor aproveitado para outras tarefas.
Antes de alterar implementar o modelo assíncrono⚡ 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., anote o seguinte:
- Identifique os pontos de chamada mais demorados (consultas
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. externas, processamento em massa, leitura de arquivos grandes).
- Valide se a biblioteca ou recurso que está sendo utilizado oferece 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.: por exemplo, no caso do Entity Framework
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. existe o
SaveChangesAsync()
, no caso de I/O de arquivos, métodos🧠 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. como
ReadAsync()
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.
WriteAsync()
. - Planeje a adoção do sufixo
Async
para todos os novos métodos⚡ 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. (por convenção, métodos
🧠 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. assinados como
async
recebem⚡ 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
ao final do nome).⚡ 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.
Identificando o Código que Precisa de Refatoração🔗
Digamos que estamos analisando 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. hipotético chamado
ProcessarPedidos()
, responsável por:
1. Ler dados de um banco de dados.
2. Processar cálculos complexos.
3. Salvar resultados em um sistema externo.
De forma síncrona, 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. pode se parecer com isto (exemplo simplificado):
public void ProcessarPedidos()
{
var pedidos = Repositorio.BuscarTodosOsPedidos();
foreach (var pedido in pedidos)
{
var resultado = CalcularTaxas(pedido);
ServiceExterno.EnviarResultado(resultado);
}
}
- Nesse fluxo, cada etapa pode levar desde segundos até minutos, dependendo da quantidade
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. de dados ou da projeção de uso.
- O principal sintoma: a chamada é bloqueante até que todos os processos terminem.
Nesse cenário, vamos considerar refatorar cada etapa para torná-la 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..
Transformando Métodos e Classes em Assíncronos🔗
Ao decidir refatorar um método para assíncrono⚡ 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 C#, siga estes passos básicos:
1. Coloque a palavra-chave🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança.
async
na assinatura do 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..
2. Retorne Task
ou 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.
Task
, em vez de 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.<T>
void
ou T
.
3. Utilize await
nos pontos que anteriormente eram bloqueantes.⚡ 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.
Na prática, refatoraríamos 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.
ProcessarPedidos()
conforme segue:
public async Task ProcessarPedidosAsync()
{
var pedidos = await Repositorio.BuscarTodosOsPedidosAsync();
foreach (var pedido in pedidos)
{
var resultado = CalcularTaxas(pedido);
// Aqui, se CalcularTaxas for bloqueante, consideramos transformá-lo em um método assíncrono também, caso seja necessário.
await ServiceExterno.EnviarResultadoAsync(resultado);
}
}
Observe:
- Agora retornamos um
Task
, o que permite que outros métodosDiferenç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.
🧠 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. usem
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. ProcessarPedidosAsync()
- 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.
BuscarTodosOsPedidosAsync()
foi chamado comawait
. Supõe-se que o repositório já ofereça um método assíncrono⚡ 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.
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 ainda não oferecer, precisará ser criado.
ServiceExterno.EnviarResultadoAsync()
também precisa oferecer 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..
Dica: Caso haja linhas de código que não sejam realmente bloqueantes, não é estritamente necessário torná-las assíncronas. O ideal é focar nas partes de I/O (chamadas a rede, disco, banco de dados) que efetivamente trazem ganho de performance ao adotar async
.
Ajustando Chamadas a Métodos Assíncronos🔗
Quando uma função é refatorada para 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., todas as chamadas a essa função também devem lidar com o novo padrão. Se você tiver em outro ponto do código algo assim:
public void ExecutarProcessamento()
{
ProcessarPedidos();
}
Ele precisará ser atualizado 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!:
public async Task ExecutarProcessamentoAsync()
{
await ProcessarPedidosAsync();
}
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. todo o caminho de chamadas (call stack
🔍 Debugging no VS: Breakpoints, DataTips e Janelas Escondidas!Descubra como utilizar breakpoints, DataTips e janelas escondidas para potencializar o debugging no Visual Studio e resolver bugs em C# com facilidade.) deve ser ajustado. Isso muitas vezes se espalha, pois sempre que um método vira
async
, quem o chama também requer um tratamento assíncrono - a menos que seja um ponto de entrada (por exemplo, no ASP.NET Core⚡ 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.
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real., o framework cuida da chamada assíncrona do controller, que pode usar
await
livremente).⚡ 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.
Tratamento de Exceções Durante a Refatoração🔗
O fluxo assíncronoUtilizando Streams Assíncronas para Download e Upload de DadosDescubra como utilizar async/await com streams assíncronas no ASP.NET Core para otimizar download e upload de arquivos, garantindo escalabilidade e eficiência. não elimina exceções, mas as redistribui de forma diferente:
- Exceções
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. em métodos
async
: são mais difíceis de rastrear. Por isso, evite ao máximo⚡ 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. void
🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. esse tipo de assinatura, exceto em handlers de eventos.
- Exceções
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. em métodos
async
são repassadas ao chamador através da Task⚡ 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. 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. resultante. Se você não fizer
await
, poderá não capturar exceções⚡ 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.
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código..
- Use
try
/catch
normalmente ao redor de chamadasawait
, garantindo que qualquer exceção⚡ 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.
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. seja tratada ou propagada de forma controlada.
Exemplo:
public async Task ExecutarComTratamentoAsync()
{
try
{
await ProcessarPedidosAsync();
}
catch (Exception ex)
{
// Aqui você faz o tratamento ou log da exceção, antes de lançar novamente ou encerrar o fluxo
Console.WriteLine($"Ocorreu um erro: {ex.Message}");
throw;
}
}
Dicas de Boas Práticas🔗
- Evite métodos
🧠 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.
async
(exceto para eventos): isso dificulta a rastreabilidade de erros⚡ 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. void
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades..
- Use
ConfigureAwait
quandoConfigurando o 'ConfigureAwait': Implicações e Melhores PráticasDescubra como o ConfigureAwait pode melhorar a performance de métodos assíncronos em C#, evitando overhead desnecessário e deadlocks.(false)
📊 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. estiver fora do contexto de UI: em bibliotecas de classe, por exemplo, para evitar capturar o contexto de sincronização
Evitando Deadlocks: Entendendo o Papel do Contexto de SincronizaçãoDescubra como deadlocks surgem em código assíncrono e aprenda a evitar bloqueios no contexto de sincronização em C# de forma prática..
- Faça testes de desempenho
⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs.: Mesmo que assíncrono
⚡ 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. geralmente seja mais eficiente, teste para confirmar melhorias (ou eventual regressão) em seu cenário.
- Mantenha o código limpo: use nomes claros, como
ProcessarPedidosAsync
,BuscarDadosAsync
, etc.
Exemplo Simplificado de Refatoração Passo a Passo🔗
Abaixo, uma visão geral das mudanças mais comuns:
Etapa | Código Síncrono | Código Assíncrono |
---|---|---|
1. Identificar método alvo | public void Processar() | - |
2. Remover bloqueios explícitos | Thread.Sleep(1000); // Exemplo de bloqueio | await Task.Delay(1000); |
3. Converter assinaturas de métodos e variáveis | public void Processar() | public async Task ProcessarAsync() |
4. Adaptar chamadas internas | var dados = ObterDados(); | var dados = await ObterDadosAsync(); |
5. Ajustar o chamador | MetodosAuxiliares.ExecutarProcessamento(); | await MetodosAuxiliares.ExecutarProcessamentoAsync(); |
6. Revisar exceções | try { Processar(); } catch(Exception e) { ... } | try { await ProcessarAsync(); } catch(Exception e) { ... } |
7. Manter convenções assíncronas | Nome independe de convenção ou sufixo. | Sufixo Async para indicar explicitamente que o método é assíncrono. |
Conclusão🔗
Refatorar código de síncrono para assíncrono em .NET pode trazer ganhos expressivos de desempenho e responsividadeXamarin/MAUI com Async/Await: Interface Responsiva para Aplicativos MóveisAprenda a implementar Async/Await em Xamarin/MAUI e mantenha sua UI responsiva. Tutorial com dicas, exemplos e práticas para apps mobile. para suas aplicações. O caminho para essa refatoração envolve:
1. Identificar métodos🧠 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. que bloqueiam o fluxo (principalmente I/O
Automatizando Processos de I/O com Async/Await em Ferramentas CLIEste tutorial em C# ensina como utilizar Async/Await para automatizar entrada e saída de dados em aplicações CLI, garantindo eficiência e escalabilidade.).
2. Transformar as assinaturas 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. implementar
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.
3. Ajustar todos os pontos de chamada para utilizar métodos🧠 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.
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.
4. Gerenciar exceções💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. apropriadamente 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. garantir que o fluxo seja confiável.
Com prática e planejamento, essa migração🔄 Migrations: Evolua seu Banco sem Perder Dados!Aprenda como aplicar migrations com segurança usando Entity Framework Core para evoluir seu banco de dados sem perder dados. passa a ser natural e muito benéfica. Após seguir esse guia passo a passo, você estará melhor preparado para tornar suas aplicações mais escaláveis e responsivas, aproveitando o melhor que a plataforma .NET oferece em termos de assincronicidade.
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, oferecendo fundamentos e exemplos úteis para a conversão de código síncrono para assíncrono, alinhando-se perfeitamente com o conteúdo do tutorial: learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async