Одна строчка .Result роняет ваш ASP.NET Core при CPU 8 %: разбор hill-climbing в .NET 9

TL;DR. Один «безобидный» foo.GetAsync().Result в middleware способен превратить ASP.NET Core, державший 50k RPS с p99 = 40 мс, в сервис с 12k RPS и p99 = 4 с — при CPU 8 %. Виноват не сам blocking call, а hill-climbing — фидбэк-луп в ThreadPool, в недрах которого живёт дискретное преобразование Фурье. Разбираем по исходникам CoreCLR, почему это вообще возможно, воспроизводим эффект на ~80 строках кода и разбираемся, почему SetMinThreads — не решение, а анестезия.

https://habr.com/ru/articles/1040804/

#threadpool #hillclimbing #asyncawait #net9 #aspnetcore #starvation #configureawait #taskresult #bulkhead #setminthreads

Одна строчка .Result роняет ваш ASP.NET Core при CPU 8 %: разбор hill-climbing в .NET 9

TL;DR. Один foo.GetAsync().Result внутри middleware превращает ASP.NET Core, державший 50k RPS на p99 = 40 мс, в сервис на 12k RPS с p99 = 4 с при CPU 8 %. Виноват не блокирующий вызов сам по себе....

Хабр

Якщо ви розробник .NET, ви, напевно, стикалися з ConfigureAwait(false), але чи достатньо добре розумієте всі його нюанси та нові можливості? 🤔

https://taraskovalenko.github.io/posts/configure-await/

#DotNET #AsyncAwait #ConfigureAwait #CSharp #SoftwareDevelopment #Performance #NET8 #Multithreading #BestPractices #BackendDevelopment

Повне керівництво з ConfigureAwait в .NET

Асинхронне програмування стало основою сучасної розробки на платформі .NET. Механізм async/await значно спростив роботу з асинхронними операціями, але приніс з собою певні нюанси, які важливо розуміти для створення ефективних додатків. Одним із ключових аспектів асинхронного програмування в .NET є метод ConfigureAwait, який дозволяє контролювати, де продовжиться виконання асинхронного методу після await.

Taras Kovalenko
【C#】上級者でも陥る5つの落とし穴と対策 - Qiita

はじめにC#はとても多くの機能を持つ言語ですが、その柔軟性と表現力の高さゆえに、上級者でも陥りやすい落とし穴がいくつか存在します。今回は、実務でよく見かける注意すべき5つのポイントをまとめてみま…

Qiita