C# 1001 notes
رفتن به کانال در Telegram
Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp
نمایش بیشتر6 541
مشترکین
-224 ساعت
+47 روز
+330 روز
آرشیو پست ها
6 541
🤖 Open Claude Cowork: AI-партнёр для программирования
Open Claude Cowork — это настольный AI-ассистент, который помогает в программировании, управлении файлами и выполнении задач. Он совместим с Claude Code и предлагает визуальный интерфейс для удобной работы с AI, позволяя легко управлять сессиями и получать результаты в реальном времени.
🚀Основные моменты:
- 🖥️ Настольное приложение с визуальным интерфейсом
- 🤖 AI-партнёр для выполнения задач
- 🔁 Полная совместимость с Claude Code
- 📂 Удобное управление сессиями и историей
- 🔐 Контроль разрешений для безопасных действий
📌 GitHub: https://github.com/DevAgentForge/Claude-Cowork
6 541
⚡️ Автоматическая регистрация Minimal APIs в .NET - без ручного маппинга
Если в проекте 20+ endpoint’ов,
app.MapGet/MapPost превращается в ад.
Решение - авторегистрировать endpoints через DI.
Идея:
1) Делаешь общий интерфейс IEndpoint
2) Каждый endpoint реализует его
3) На старте приложения сканируешь сборку, регистрируешь все реализации в DI
4) Достаёшь их из DI и вызываешь MapEndpoints()
Плюсы:
✅ чистый Program.cs
✅ каждый endpoint в отдельном файле
✅ масштабируется без хаоса
✅ легко тестировать и поддерживать
Пример паттерна:
builder.Services.AddEndpoints(typeof(Program).Assembly);
public interface IEndpoint
{
void Map(IEndpointRouteBuilder app);
}
public static class EndpointExtensions
{
public static IServiceCollection AddEndpoints(this IServiceCollection services, Assembly assembly)
{
var endpoints = assembly.DefinedTypes
.Where(t => !t.IsAbstract && !t.IsInterface && typeof(IEndpoint).IsAssignableFrom(t))
.Select(t => ServiceDescriptor.Transient(typeof(IEndpoint), t))
.ToArray();
services.TryAddEnumerable(endpoints);
return services;
}
public static void MapEndpoints(this WebApplication app)
{
foreach (var endpoint in app.Services.GetServices<IEndpoint>())
endpoint.Map(app);
}
}6 541
Repost from C# (C Sharp) programming
✔️ C# стал языком 2025 года по версии TIOBE.
Индекс TIOBE подвел итоги года: звание «Язык 2025 года» досталось C#, который показал рекордный рост популярности (+2.94%)? однако в общем зачете он по-прежнему занимает 5-ю строчку. Абсолютным лидером остается Python с 22.61% долей рынка.
В первой пятерке произошли перестановки: язык C поднялся на 2 место, сместив C++ на 4-ю позицию; 3 место досталось Java, а R вернулся в топ-10. Провал года - Go, который неожиданно сдал позиции, опустившись сразу на 16-е место.
Индекс оценивает популярность технологий на основе поисковых запросов, активности комьюнити и количества обучающих материалов.
https://www.tiobe.com/tiobe-index/
6 541
🔥 На stepik вышел курс, который учит Создавать настоящие AI-сервисы, а не просто запускать скрипты?
Этот практический курс по Python и FastAPI покажет, как собрать полноценное приложение с ИИ, базой данных, автогенерацией контента и Telegram-ботом.
Ты пройдёшь путь от первого HTTP-запроса до рабочего сервиса, который сам генерирует текст через ИИ, сохраняет данные, отправляет результаты по расписанию и отвечает пользователям.
Никакой теории ради теории - только практические шаги, из которых рождается реальный продукт.
🎁 48 часов действует скидка в 40% процентов
👉 Начать учиться на Stepik
6 541
Repost from C# (C Sharp) programming
3 простые оптимизации, которые реально ускоряют код
1️⃣ Забирай данные пачкой
Меньше запросов — меньше сетевых задержек.
Вместо десятков запросов — один
IN (...).
2️⃣ Делай больше параллельно
Если задачи не зависят друг от друга — выполняй их одновременно.
Асинхронность часто даёт бесплатный прирост скорости.
3️⃣ Кэшируй результаты
Если данные не меняются — не пересчитывай и не запрашивай их заново.
Память дешевле времени.
Никакой магии и сложных алгоритмов — просто базовые приёмы, которые в реальных проектах дают самый заметный эффект.6 541
🔥 Последний шанс: набор на курс Highload Architect в этом году завершается! 🚀
Если хотите перейти от разработки к архитектуре высоконагруженных систем — действуйте сейчас.
Чтобы попасть в поток и зафиксировать спеццену, нужно успеть пройти вступительное тестирование до закрытия набора.
Вы сможете прокачать:
• Проектирование масштабируемых систем под миллионы запросов
• Оптимизацию производительности и отказоустойчивые архитектуры
• Практику с современными инструментами highload-разработки
• Применение проверенных паттернов и подходов в продакшене
🗓 Старт уже совсем скоро, места ограничены. Формат — онлайн, реальные кейсы, проект с защитой и детальный фидбек от практиков.
👉 Пройдите вступительное тестирование прямо сейчас: https://otus.pw/m5B0/?erid=2W5zFHPuxbJ
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 541
🔥 Как правильно работать с конфигурацией в .NET
Самый чистый и масштабируемый способ получать настройки в .NET - это Options pattern.
Где живет конфигурация
Настройки приложения могут приходить из разных источников:
- переменные окружения
- JSON-файлы appsettings
- user secrets
- другие configuration providers
Да, можно читать значения напрямую через IConfiguration.
Но это плохо масштабируется:
- легко ошибиться в ключе
- нет типизации
- нет валидации
- код быстро превращается в хаос
Поэтому IConfiguration напрямую лучше не использовать в бизнес-коде.
Options pattern - как правильно
Вместо этого используется Options pattern:
1. Создаешь класс настроек
- один класс = одна логическая группа конфигурации
2. Биндишь его к appsettings.json
- через services.Configure<T>
3. Используешь настройки через DI
- IOptions
- IOptionsSnapshot
- IOptionsMonitor
Плюсы подхода
- строгая типизация
- автокомплит в IDE
- централизованная конфигурация
- проще рефакторить
- можно добавить валидацию через data annotations
Например:
- [Required]
- [Range]
- [EmailAddress]
Это позволяет ловить ошибки конфигурации при старте приложения, а не в продакшене.
Важно знать
Существуют разные интерфейсы:
- IOptions - статические настройки на все время жизни приложения
- IOptionsSnapshot - обновляются на каждый запрос (scoped)
- IOptionsMonitor - отслеживают изменения конфигурации в рантайме
Понимание разницы между ними сильно влияет на корректность архитектуры.
Если пишешь production .NET - Options pattern должен быть стандартом по умолчанию.
https://www.milanjovanovic.tech/blog/how-to-use-the-options-pattern-in-asp-net-core-7
6 541
🛠 Как оживить протухшую ветку без merge-хаоса
Бывает: вы увлеклись разработкой, прошло пару недель (или месяцев), а основная ветка уже ушла далеко вперёд. В итоге — боль, конфликты и бесконечные merge-коммиты.
В таких случаях может спасати ребейз на свежую ветку:
git pull --rebase origin release/1.2.0
Она подтянет последние изменения из релизной ветки и наложит ваши коммиты поверх, сохранив линейную историю.
Конфликты всё равно придётся разруливать, но по одному — в контексте конкретного коммита, а не в гигантской свалке.
После успешного ребейза пушим с --force-with-lease, чтобы аккуратно обновить удалённую ветку, и продолжаем работать так, как будто отставания и не было.6 541
🧠 Polyglot Persistence: как современные системы живут с десятками баз данных
🔥 23 декабря в 20:00 мск — открытый вебинар в OTUS.
Одна база данных больше не справляется с требованиями современного мира. Сегодня компании вроде Avito, Yandex, Ozon и Spotify объединяют PostgreSQL, ClickHouse, Redis, Kafka, Elasticsearch и десятки других инструментов в единую экосистему, где каждая БД отвечает за свой кусочек производительности.
📌 На вебинаре разберём:
— Принципы Polyglot Persistence и как распределять роли между СУБД
— Как связать PostgreSQL, ClickHouse, Redis и Kafka без потери согласованности
— Как работают event-driven архитектуры, CDC и outbox-паттерн в боевых системах
— Как проектировать отказоустойчивые data-платформы
Регистрация https://otus.pw/enVW/?erid=2W5zFHSfqbE
Бесплатное занятие приурочено к старту курса Highload Architect, где вы научитесь проектировать системы, выдерживающие миллионы запросов.
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 541
🚦 Feature Flags в .NET - как управлять релизами без redeploy
Feature flags (фиче-флаги) позволяют включать и выключать функциональность на лету, без повторного деплоя и риска для продакшена.
Идея простая:
код задеплоен → поведение управляется конфигурацией.
Что это даёт на практике:
— Постепенные релизы
Можно включить новую фичу сначала для 1%, 10% или конкретной группы пользователей.
— Быстрый rollback
Если что-то пошло не так — просто выключаете флаг. Без откатов и срочных хотфиксов.
— A/B тесты
Разные пользователи получают разное поведение одного и того же кода.
— Targeting пользователей
Фичи можно включать:
• по user id
• по роли
• по региону
• по environment (dev / staging / prod)
— Меньше фиче-веток
Код живёт в main, а не за флагами в git.
В .NET обычно используют:
- Microsoft.FeatureManagement
- Azure App Configuration
- LaunchDarkly / Unleash / ConfigCat
Где это особенно полезно:
- публичные API
- high-traffic сервисы
- SaaS-продукты
- экспериментальные и рискованные фичи
Коротко:
Feature flags превращают релиз из «одного опасного момента» в управляемый процесс.
Это один из самых мощных инструментов для зрелой backend-архитектуры.
👉 Подробнее
6 541
Крутая статья - «Building an Event Queue in ASP.NET Core» от Deepumi.
🔹 Она показывает, как правильно построить очередь событий внутри ASP.NET Core-приложения:
• использовать встроенные механизмы (middleware / DI)
• распределять события между обработчиками
• обрабатывать события асинхронно и надёжно
🔹 Такая архитектура помогает:
• реализовать decoupled компоненты, которые не знают друг о друге
• централизовать событие-поток (логика, оповещения, триггеры и т.п.)
• легче масштабировать и тестировать код
Если работаешь с ASP.NET Core и хочешь сделать систему событий - стоит заглянуть.
Подробнее: deepumi.com/blog/building-an-event-queue-in-aspnet-core.html
6 541
💻 Асинхронная обработка данных в высоконагруженных системах 🚀
🔥 16 декабря в 20:00 мск — открытый урок в OTUS.
📌 На вебинаре вы узнаете:
— Как использовать асинхронную обработку данных для масштабирования сервисов
— Как работают очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия
— Как выглядит архитектура реального проекта: от веб-сервера до брокера сообщений и базы данных
— Какие узкие места чаще всего встречаются в асинхронных системах и как их устранять
🎓 После занятия вы:
— Разберётесь в принципах асинхронной архитектуры и её влиянии на производительность
— Научитесь применять асинхронные подходы
— Получите реальные примеры архитектурных решений
👉 Регистрация https://otus.pw/Ayxv/?erid=2W5zFJbb2u6
Бесплатный урок приурочен к старту курса Highload Architect, на котором вы освоите архитектуры, выдерживающие миллионы запросов в секунду, и научитесь проектировать системы без узких мест. 🚀
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 541
+7
🚀 .NET 10 - реально мощный релиз. Вот что важно знать 👇
.NET 10 и C# 14 вышли 11 ноября 2025 года.
Это LTS-версия - поддержку будут выпускать до ноября 2028 года,
поэтому её можно спокойно брать для продакшна.
🔥 Главное
✔ C# 14
Новый синтаксис и возможности языка:
• Extension Members — расширения прямо в типах
• Null-Conditional Assignment - безопасные присваивания
•
field keyword — точный контроль над авто-свойствами
• Модификаторы у параметров лямбд
• Частичные конструкторы и события
✔ File-Based Apps
Теперь можно просто создать один .cs файл и запускать приложение -
без .sln, без .csproj. Быстро, просто, удобно.
✔ ASP.NET Core
• Валидация в Minimal APIs
• JSON Patch
• SSE (Server-Sent Events)
• Поддержка OpenAPI 3.1
✔ EF Core
• Complex Types можно делать optional
• JSON и struct внутри Complex Types
• LeftJoin / RightJoin
• Named Query Filters
• ExecuteUpdate работает с JSON-колонками
• В ExecuteUpdate теперь можно использовать обычные лямбды
Полный гайд здесь:
↳ https://antondevtips.com/blog/new-features-in-dotnet-10-and-csharp-14/?utm_source=twitter&utm_medium=social&utm_campaign=04-12-20256 541
✔️ Delegating Handlers в .NET: как правильно добавлять сквозную логику для HttpClient
DelegatingHandler - это удобный способ внедрять сквозную логику в каждый HTTP-запрос: авторизацию, логирование, метрики, ретраи и любые другие политики, не трогая основной код.
Пример обработчика аутентификации:
- добавляет заголовок Authorization
- подставляет корректный User-Agent
- затем передаёт управление следующему звену конвейера
Это позволяет централизованно контролировать конфигурацию запросов и избегать дублирования логики во всех сервисах.
Подходит для чистой архитектуры, микросервисов и SDK, где важна единообразная обработка запросов.
6 541
⚡️ Полезное о блокировках в C#. Многие собеседования заваливаются именно здесь.
Коротко по сути:
lock не работает в `async`-методах.
Причина проста — выполнение может продолжиться на другом потоке, и гарантии взаимного исключения теряются.
Что использовать вместо `lock` в асинхронном коде:
- SemaphoreSlim — основной вариант
- Semaphore
- Mutex
- Monitor (в синхронных сценариях)
Правильный шаблон:
1. Всегда используйте таймаут, чтобы избежать зависаний.
2. Освобождайте ресурс в `finally`, иначе возможна утечка блокировки.
Примерный подход:
- попытаться войти с ограничением времени
- выполнить критическую секцию
- гарантированно освободить семафор
Почему это важно:
В многопоточном и распределённом окружении неправильная синхронизация приводит к гонкам, дублированию запросов, «штормам» в кеше и нагрузке на внешний API.
Вопрос для практики:
Как реализовать блокировку на уровне базы данных, чтобы синхронизировать несколько инстансов приложения?
Ответ — в разборе по distributed locking:
milanjovanovic.tech/blog/distributed-locking-in-dotnet-coordinating-work-across-multiple-instances6 541
🖥 Directory.Build.props - простой способ задать единые настройки для всей .NET-солюции.
Вместо того чтобы дублировать конфигурацию в каждом .csproj, ты создаёшь один файл в корне и управляешь всем централизованно: версия языка, уровни предупреждений, Nullable, ImplicitUsings, Deterministic-сборки и даже версии NuGet-пакетов.
Подходит, если хочешь порядок в проектах и одинаковые правила для всей команды.
6 541
Коллекции .NET: взгляд изнутри
Как устроены стандартные коллекции в .NET и почему понимание их внутренней логики помогает писать более производительный код? На открытом вебинаре курса OTUS «C# Developer. Advanced» Антон Герасименко покажет, что происходит «под капотом» List, Dictionary и других структур данных.
📆 4 декабря, 20:00
Коллекции .NET: взгляд изнутри:
— разберём устройство стандартных коллекций
— заглянем в исходный код и объясним, почему они работают именно так
— обсудим, когда стоит реализовать собственную структуру данных
Вебинар будет полезен разработчикам уровня Junior и выше, которые хотят глубже понимать, как устроены базовые механизмы .NET и как использовать их эффективнее.
👉Зарегистрируйтесь: https://otus.pw/esShq/?erid=2W5zFGumrxg
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 541
«Обзор нововведений в C# 14»
Статья от PVS-Studio на Хабре описывает, что именно добавили в C# 14 и как эти изменения делают код чище и короче.
1. Ключевое слово
field
Теперь в сеттере свойства можно обращаться к скрытому полю без его явного объявления.
Это уменьшает шаблонный код и делает свойства компактнее.
Пример было:
private string _email;
public string Email
{
get => _email;
set => _email = value.Trim();
}
Пример стало:
public string Email
{
get;
set => field = value.Trim();
}
Лямбды с модификаторами без указания типа
Если в параметрах используются ref, out, in, теперь можно не писать тип.
Это улучшает читаемость и уменьшает шум.
Было:
(value, out string error) => ...
Стало:
(value, out error) => ...
Перегрузка операторов составного присваивания (+=, -=, *=, /=)
Теперь такие операторы можно перегружать напрямую, а не через комбинацию бинарного оператора и присваивания.
Это делает пользовательские типы более естественными и управляемыми.
nameof для открытых обобщённых типов
Теперь можно писать:
nameof(List<>)
Это полезно при генерации кода, рефлексии и работе с API, где нужны именно открытые generics.
C# 14 - небольшое, но важное обновление языка, направленное на упрощение синтаксиса и уменьшение шаблонного кода. Наиболее заметные улучшения - field и новые правила для лямбд.6 541
🧩 Борьба с блокировками в PostgreSQL: как достичь высокой параллельности при большой нагрузке 🚀
🔥 2 декабря в 20:00 мск — открытый урок в OTUS.
📌 На вебинаре рассмотрим:
— Почему возникают блокировки и как они влияют на скорость работы базы данных— Типы блокировок в PostgreSQL и их особенности на уровне транзакций и строк
— Как находить узкие места, анализировать ожидания и устранять deadlock-и
— Методы оптимизации запросов и транзакций для повышения параллельности
— Архитектурные приёмы и практики проектирования систем с высокой конкурентностью
🎓 После урока вы:
— Поймёте, как устроен механизм блокировок и научитесь управлять ими осознанно
— Научитесь диагностировать и устранять конфликты между транзакциями
— Получите набор практических решений по оптимизации PostgreSQL под нагрузкой
— Сможете спроектировать архитектуру, обеспечивающую высокую стабильность и масштабируемость
👉 Регистрация https://otus.pw/k3A0/?erid=2W5zFHrYhVa
Бесплатное занятие приурочено к старту курса Highload Architect, на котором вы освоите подходы к построению производительных архитектур, готовых к тысячам запросов в секунду.
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 541
⚡️ Полное руководство по Bash: от основ к продвинутым темам
Bash (Bourne Again SHell) — это одна из самых популярных Unix-оболочек, широко используемая для запуска команд и написания скриптов в Linux и macOS.
Скрипты Bash позволяют автоматизировать рутинные задачи, объединять команды в программы и управлять системой через командную строку.
Данное руководство последовательно познакомит вас с основами Bash (синтаксис, переменные, условия, циклы и т.д.), а затем перейдет к продвинутым возможностям (таким как настройка strict mode, использование trap-обработчиков, планирование задач через cron и др.). Мы рассмотрим практические примеры скриптов, сопровождая их поясняющими комментариями, чтобы у вас сложилось цельное понимание создания надежных Bash-скриптов.
https://uproger.com/polnoe-rukovodstvo-po-bash-ot-osnov-k-prodvinutym-temam/
Видео: https://www.youtube.com/watch?v=ei0a1TT4ukU
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
