Timeout e Retries em C#: Resiliência com async/await
Awaiters Personalizados em C#: Controle Avançado de Async
Criar
📡 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. Awaiters personalizados pode ser uma maneira poderosa de controlar o fluxo de código assíncrono
Refatorando Código Síncrono para Assíncrono: Guia Passo a PassoDescubra como transformar código síncrono em assíncrono em C# com práticas detalhadas, garantindo performance e escalabilidade em suas aplicações. em situações mais específicas. Geralmente, usamos o Task e
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.
📊 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. seu awaiter padrão para orquestrar nossas operações assíncronas
Repositório Assíncrono: Como Estruturar o Acesso a DadosDescubra como implementar um repositório assíncrono em C# seguindo boas práticas de separação de responsabilidades e eficiência de dados., mas existem casos em que precisamos de um comportamento mais sob medida, seja para otimizar a checagem de status, seja para manipular eventos externos antes de considerar a tarefa
🤝 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. concluída.
Neste tutorial, exploraremos:
- O que são Awaiters.
- Por que criar
📡 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. implementações personalizadas. - Os métodos e propriedades
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. fundamentais que um Awaiter precisa ter. - Um exemplo passo a passo de como criar
📡 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. e usar um Awaiter que atenda demandas especiais.
Visão Geral sobre Awaiters🔗
O Awaiter é o componente que entra em ação 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. usamos o operador await em um objeto. Ele define como o compilador deve verificar o término de uma tarefa e como o código deve prosseguir assim que 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. estiver concluída. Em nível avançado, o compilador C# traduz await para chamadas a métodos e propriedades
⚡ 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. objeto
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. de um Awaiter, como GetAwaiter(), IsCompleted, OnCompleted(...) 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. GetResult().
Ao criarmos Awaiters personalizados, normalmente precisamos implementar a interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. INotifyCompletion, ou, em alguns casos, ICriticalNotifyCompletion, dependendo do nível de controle que queremos exercer na retomada do fluxo.
Por que Criar Awaiters Personalizados?🔗
Nem sempre as operações assíncronas
Repositório Assíncrono: Como Estruturar o Acesso a DadosDescubra como implementar um repositório assíncrono em C# seguindo boas práticas de separação de responsabilidades e eficiência de dados. que desenvolvemos se encaixam perfeitamente no padrão 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.ValueTask. Algumas situações em que um Awaiter customizado é útil:
- Interação com hardware ou dispositivos externos: verificar diretamente se um dispositivo completou determinada operação antes de retomar o fluxo 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.. - Eventos de biblioteca
🎮 Projeto: Sistema de Gerenciamento de Biblioteca com OOP Puro!Descubra como desenvolver um sistema de biblioteca eficiente utilizando conceitos de Orientação a Objetos em C#. Mergulhe neste tutorial prático e desafiador! de baixo nível: se sua aplicação precisa reagir a eventos internos de API
🌍 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. nativa, você pode encapsular a lógica de “aguardo” em um Awaiter. - Fluxo de processamento de dados: aplicar checagens especiais ou condicionar a conclusão não apenas ao término da tarefa
🤝 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., mas também a algum estado adicional do sistema.
Métodos e Propriedades Fundamentais🔗
Um Awaiter padrão em C# deve prover ao menos:
| Método/Propriedade | Descrição |
|---|---|
IsCompleted | Propriedade que indica se a operação já foi concluída. |
GetResult() | Método que retorna o resultado da operação (caso haja um retorno). Se não houver retorno, pode ser void. |
OnCompleted(Action) | Método que recebe uma ação a ser executada quando a operação assíncrona estiver concluída. |
- IsCompleted: Usado 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! otimizar o fluxo do compilador - se estiver true, o código não precisa agendar a continuação em um retorno posterior. - GetResult(): Invocado 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. o Awaiter determina que a tarefa
🤝 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. foi concluída, retornando o resultado correspondente (ou nada, se for void). - OnCompleted(Action): É aqui que a continuação (o restante do 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.) é registrada para ser executada assim que a operação estiver concluída.
Passo a Passo: Criando um Awaiter Personalizado🔗
Vamos criar
📡 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. um pequeno Awaiter que simula a espera
Criando seu Primeiro Programa Assíncrono: do Zero ao DeployAprenda a configurar seu ambiente, criar e executar um projeto assíncrono em C# com async/await e prepare o deploy da sua aplicação com segurança. por um intervalo de tempo, porém de forma totalmente customizada. Isso é apenas um exemplo didático para ilustrar os pontos centrais da implementação.
Definindo a Classe de Espera
Vamos começar definindo uma 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. que representará nossa operação de espera simulada:
using System;
using System.Runtime.CompilerServices;
using System.Threading;
public class CustomDelay
{
private readonly int _milliseconds;
public CustomDelay(int milliseconds)
{
_milliseconds = milliseconds;
}
// Método essencial para o uso com 'await'
public CustomDelayAwaiter GetAwaiter()
{
return new CustomDelayAwaiter(_milliseconds);
}
}
- Construtor
🔑 Construtores: Inicialize Objetos como um Arquiteto de OOP!Descubra como os construtores em C# estruturam objetos, garantindo inicialização segura e promovendo boas práticas de desenvolvimento orientado a objetos.: recebe o tempo em milissegundos que queremos simular de atraso. - GetAwaiter(): retorna nossa 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.) que implementará a lógica de “aguardo”.
Implementando o Awaiter
Agora, precisamos criar a 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./estrutura que efetivamente implementa os métodos e propriedades
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. esperados pelo compilador:
public struct CustomDelayAwaiter : INotifyCompletion
{
private readonly int _milliseconds;
private Timer _timer;
public bool IsCompleted { get; private set; }
public CustomDelayAwaiter(int milliseconds)
{
_milliseconds = milliseconds;
_timer = null;
IsCompleted = false;
}
public void OnCompleted(Action continuation)
{
// Inicializa um timer que, ao expirar, marca IsCompleted como true e chama a continuação.
_timer = new Timer(_ =>
{
IsCompleted = true;
_timer.Dispose();
_timer = null;
continuation();
}, null, _milliseconds, Timeout.Infinite);
}
public void GetResult()
{
// Caso fosse necessário retornar algum valor, faríamos aqui.
// O compilador chamará este método depois de IsCompleted == true.
}
}
- IsCompleted: inicia como
false. Após o timer expirar, definimos comotrue. - OnCompleted(Action): registra a ação de continuação (o resto do 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.). Quando o timer expira, chamamos continuation(). - GetResult(): se precisássemos retornar dados, este seria o local adequado. Aqui, apenas estamos demonstrando um atraso, 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. não retornamos nada.
Usando o Awaiter
Podemos agora criar 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. para ilustrar o comportamento:
public static async Task TestCustomDelay()
{
Console.WriteLine("Iniciando teste do CustomDelay...");
// Aguarda nosso atraso personalizado de 2 segundos
await new CustomDelay(2000);
Console.WriteLine("Concluído atraso personalizado.");
}
- 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. o compilador encontra await, ele chamará
⚡ 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. new CustomDelay(2000)GetAwaiter(), que retornaCustomDelayAwaiter. - Em seguida, verificará
IsCompleted. Se for
🔄 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! false, chamaráOnCompleted(Action)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! se inscrever na continuação. - Assim que a continuação é acionada pelo timer, o compilador volta 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. chama GetResult(), finalizando oawait.
⚡ 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.
Considerações Importantes🔗
- Uso de Estrutura vs. 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.: Podemos implementar o Awaiter tanto como 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. quanto como struct
🏗️ 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.. O struct
🏗️ 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. ajuda a evitar alocações
📉 Alocações Zero: Escreva Código Sem Gerar Lixo!Aprenda a evitar alocações desnecessárias em C# aplicando técnicas com structs, stackalloc, Span<T> e pooling para uma performance ideal. extras. - Sincronização e Encapsulamento
🔒 Encapsulamento: Proteja Seus Dados como um Banco Suíço!Aprenda a proteger seus dados com encapsulamento em C#: técnicas e melhores práticas para um código seguro, modular e eficiente.: Se for realizar leituras/escritas em 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. compartilhados, considere usar mecanismos de thread
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.-safety 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! evitar problemas de concorrência. - Descarte 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.: Assim como fizemos com Timer.Dispose(), lembre de liberar 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. externos ao completar sua operação. - Extensibilidade: Você pode adicionar mais campos e propriedades
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. para acompanhar o estado da operação, logs ou métricas de monitoração enquanto espera.
Conclusão🔗
Awaiters personalizados oferecem uma forma de aprofundar 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. ajustar o comportamento do async/await às particularidades do seu contexto. Embora o uso mais frequente ainda seja com
⚡ 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 e APIs de alto nível, entender como criar
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.
📡 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. e ajustar Awaiters sob medida pode trazer benefícios 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. onde o controle minucioso sobre a finalização de uma operação é fundamental.
Com a abordagem descrita, você tem o passo a passo essencial 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!:
1. Entender o fluxo “padrão” que o compilador espera
Criando seu Primeiro Programa Assíncrono: do Zero ao DeployAprenda a configurar seu ambiente, criar e executar um projeto assíncrono em C# com async/await e prepare o deploy da sua aplicação com segurança..
2. Implementar as interfaces
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. necessárias (INotifyCompletion).
3. Personalizar a maneira como você sinaliza ao compilador que a operação terminou (via IsCompleted 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. OnCompleted(Action)).
A partir daqui, você poderá criar
📡 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. soluções mais elaboradas, sempre adequando o Awaiter às suas necessidades específicas.
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: learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás