Todos os anos faço questão de falar sobre Setembro Amarelo, mas acredito que essa conversa não pode ficar restrita a um único mês. Escrevi este artigo a partir do olhar de quem já enfrentou dificuldades emocionais e também de quem já esteve ao lado de pessoas queridas passando por momentos difíceis.
https://t.co/TsoIlTMHyC
Um dos problemas mais traiçoeiros em produção é o sync-over-async: .Result/.Wait() em chamadas HTTP ou banco. Com carga e dependências lentas, isso pode virar starvation do ThreadPool rapidamente. Async de ponta a ponta, concorrência limitada e boas métricas fazem diferença.
Some developers think Tasks create threads.
They don’t.
In .NET, work is executed by the ThreadPool, a shared pool of worker threads reused across the entire application.
Here’s the mental model that helps explain it.
When a request arrives in your ASP .NET Core app:
1️⃣ The work is placed into a task queue
2️⃣ A ThreadPool worker thread picks up the task
3️⃣ The thread executes the work
4️⃣ When the task finishes, the thread returns to the pool
Then it immediately picks up another task.
Threads are reused constantly.
That’s what makes the ThreadPool efficient.
But here’s where things go wrong.
If your code does blocking work, those threads can’t return to the pool.
Examples:
• .Result
• .Wait()
• synchronous database calls
• blocking HTTP calls
Now the thread stays stuck.
Under load, this creates a chain reaction:
Requests arrive
↓
Tasks enter the queue
↓
Threads are blocked
↓
The queue grows
↓
Latency spikes
This is called ThreadPool starvation.
Your server isn’t slow because .NET is slow.
It’s slow because all worker threads are busy waiting.
The key takeaway:
Tasks are not threads.
Threads execute tasks.
And when they’re done, they go back to the ThreadPool to execute the next one.
Unless you block them.
Curious: What’s the most common ThreadPool killer you’ve seen in production?
__
📌 Don't miss the next newsletter issue, 22,000 engineers will read it, join them: https://t.co/gI46R2Kc0c
♻️ Repost to others.
📂 You can save this post for later, and you should do it.
➕ Follow me to learn .NET and Architecture every day.
@TheCodeMan__ The most common killer I’ve seen is sync-over-async at integration boundaries: .Result/.Wait() around DB or HTTP calls. Under burst traffic, downstream latency becomes ThreadPool starvation. Async all the way, bounded concurrency and queue metrics make a big difference.
Quer identificar trechos de C# que podem esconder problemas de complexidade antes que eles cheguem em produção?
O Complexity Analyzers é um Roslyn Analyzer que detecta padrões custosos em loops, LINQ, recursão e chamadas entre métodos.
🔗 https://t.co/xaDxVezssH
#dotnet #csharp #opensource
LLMjacking é um bom exemplo de como o crescimento do uso de IA também amplia a superfície de ataque na nuvem. Neste caso, uma credencial AWS IAM comprometida e com privilégios excessivos permitiu ao atacante criar novas identidades, habilitar acesso a modelos pagos e gerar consumo de inferência cobrado da própria organização. Mais do que um problema específico de IA, o cenário reforça fundamentos que já conhecemos em arquitetura cloud: princípio do menor privilégio, credenciais de curta duração, rotação de secrets, observabilidade, auditoria via CloudTrail e alertas de anomalias de consumo. IA adiciona novos recursos à arquitetura, mas não muda um princípio básico: uma credencial com privilégios além do necessário continua sendo uma porta de entrada extremamente valiosa.
‼️ LLMjacking Attack Uses Leaked AWS IAM Key to Steal Paid AI Model Access
Details: https://t.co/7FFurzbiII
A newly documented cloud intrusion shows how quickly attackers can turn a single leaked AWS credential into a revenue stream by hijacking access to premium AI models, a technique researchers call LLMjacking.
A long-lived AWS Identity and Access Management (IAM) access key carrying AdministratorAccess permissions, the highest level of privilege an AWS identity can hold.
Once in possession of this key, the attacker created a brand-new IAM user inside the victim’s account and used it to subscribe to foundation models available through AWS Marketplace, issuing CreateAgreementRequest and AcceptAgreementRequest calls against the marketplace’s agreement service.
#cybersecuritynews
🚀 Publiquei o ADR Guard, uma CLI em .NET para ajudar times a manter Architecture Decision Records consistentes.
✅ Validação de ADRs
✅ Índice automático
✅ Regras e exit codes para CI/CD
✅ Draft de ADR com IA, mantendo revisão humana no controle
https://t.co/PJaKJVIi3S
#dotnet #architecture #opensource #ADR
What awaits Rose at the end of her journey...?
Watch the latest trailer for Castlevania: Belmont's Curse now, featuring a newly arranged version of “Bloody Tears,” the iconic track from Castlevania II: Simon's Quest 🦇
As release looms, new scenes, action sequences, and formidable bosses reveal themselves...
Castlevania: Belmont’s Curse launches on October 15, 2026, and pre-orders are available now!
Visit the official website for more details.
#Castlevania #CastlevaniaBC
This C# looks fine in review. In production it’s O(n²):
foreach (var item in items)
if (otherItems.Contains(item)) { ... }
If otherItems is a List<T>, every Contains is linear.
ComplexityAnalysis.Analyzers is a compile-time Roslyn analyzer that flags that as BIG1001 — and estimates Big-O for loops, LINQ, calls, and recursion. No runtime dependency. If it can’t prove the bound, it reports Unknown instead of guessing.
https://t.co/xaDxVezssH
Would you treat this as a warning in CI?
Quando o domínio vira apenas um conjunto de string, decimal, Guid e propriedades com set, talvez o problema não esteja só na organização do código.
No novo artigo da série sobre Domain-Driven Design, falo sobre dois problemas que frequentemente aparecem juntos: Primitive Obsession e modelo anêmico.
A ideia não é transformar cada string em um Value Object nem colocar toda regra dentro de uma Entity. É entender quando um conceito possui significado suficiente no domínio para merecer um tipo próprio e onde o comportamento realmente deve viver.
Também mostro exemplos em .NET envolvendo tipos fortes, Value Objects, invariantes, métodos de domínio e Domain Services.
No fim, a questão é simples: nosso código está apenas armazenando dados ou realmente expressando o negócio?
🔗 https://t.co/6CU2Vacdb4
#DDD #DotNet #SoftwareArchitecture #DomainDrivenDesign
Tem algo muito especial em poder jogar hoje aquilo que, anos atrás, você queria muito, mas simplesmente não tinha como.
Na época do PSP, Crisis Core: Final Fantasy VII era um desses jogos para mim. Ficou guardado por anos naquele “um dia eu jogo”.
E agora, tantos anos depois, estou finalmente jogando no Retroid Pocket 5.
É engraçado como videogame também pode ser isso: reencontrar uma vontade antiga e, de certa forma, um pedacinho de quem você era naquela época.
“Boku ga Shinou to Omotta no wa” é minha música favorita do @amazarashi_info.
Apesar do título pesado, ela nunca me pareceu uma música sobre desistir. Para mim, é sobre atravessar a escuridão até encontrar uma razão, mesmo pequena, para continuar olhando para o mundo com alguma esperança.
O que mais gosto no amazarashi é isso: ele não tenta apagar a tristeza com otimismo fácil. Ele reconhece a dor, permanece nela e, de algum lugar muito profundo, encontra algo que ainda vale a pena sentir.
Talvez por isso essa música sempre tenha ficado comigo.
https://t.co/URuST6uXYS
Meu mangá favorito de todos. 🖤 Difícil escolher uma parte específica, porque o que me conquistou foi o conjunto: personagens absurdamente carismáticos, relações complexas, dilemas morais e aquelas reviravoltas que fazem a gente repensar tudo.
E ainda tem um detalhe que eu adoro: cada personagem é inspirado em um autor real — e eu já li pelo menos um livro de cada um deles, rs. Isso deixa a experiência ainda mais especial, porque você começa a perceber várias referências às obras e às personalidades por trás dos personagens. Bungo Stray Dogs é especial demais pra mim. 🥹📚