Forwarded from Библиотека задач по C# | тесты, код, задания
Библиотечный метод возвращает ValueTask<T> (часто завершается синхронно). В вызывающем коде результат нужно ждать несколько раз и/или комбинировать с другими задачами через Task.WhenAll. Что делать правильно?
👾 — ValueTask<T> можно await-ить сколько угодно раз — как Task<T>
👍 — Сконвертировать в Task<T> через .AsTask() и уже его ждать/комбинировать
🥰 — Обернуть в Task.Run(...), чтобы получить полноценную Task
⚡️ — Никогда не возвращать ValueTask<T> из публичных API — всегда только Task<T>
Библиотека задач по C#
👾 — ValueTask<T> можно await-ить сколько угодно раз — как Task<T>
👍 — Сконвертировать в Task<T> через .AsTask() и уже его ждать/комбинировать
🥰 — Обернуть в Task.Run(...), чтобы получить полноценную Task
⚡️ — Никогда не возвращать ValueTask<T> из публичных API — всегда только Task<T>
Библиотека задач по C#
👍56⚡5
💎 Вспоминаем SOLID
SOLID — это 5 принципов объектно-ориентированного проектирования. Давайте повторим эту базу.
— Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен иметь только одну причину для изменения.
Плохо: класс UserManager и сохраняет пользователя в БД, и отправляет email.
Хорошо: UserRepository хранит, EmailService отправляет письма.
— Open/Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты для расширения, но закрыты для изменения.
Новый функционал добавляем через расширение, а не переписывание старого кода.
Пример: вместо переписывания метода — создаём новый подкласс или внедряем стратегию.
— Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Объекты подклассов должны работать так же, как объекты родителя.
Если Square наследуется от Rectangle, он должен вести себя как прямоугольник, а не ломать ожидания.
Суть: наследование не должно рушить логику программы.
— Interface Segregation Principle (Принцип разделения интерфейсов)
Лучше много маленьких интерфейсов, чем один огромный.
Плохо: интерфейс IMachine с методами print(), scan(), fax().
Хорошо: IPrinter, IScanner, IFax. Каждый класс реализует только нужное.
— Dependency Inversion Principle (Принцип инверсии зависимостей)
Зависимости должны быть от абстракций, а не от конкретных классов.
Плохо: класс ReportGenerator напрямую вызывает MySQLDatabase.
Хорошо: ReportGenerator работает с интерфейсом Database, а уже конкретная БД подставляется снаружи.
Без SOLID код быстро превращается в спагетти, где одно изменение ломает всё.
💬 Пишите в комменты как вы объясняете, что такое SOLID
🐸 Библиотека шарписта
#буст
SOLID — это 5 принципов объектно-ориентированного проектирования. Давайте повторим эту базу.
— Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен иметь только одну причину для изменения.
Плохо: класс UserManager и сохраняет пользователя в БД, и отправляет email.
Хорошо: UserRepository хранит, EmailService отправляет письма.
— Open/Closed Principle (Принцип открытости/закрытости)
Классы должны быть открыты для расширения, но закрыты для изменения.
Новый функционал добавляем через расширение, а не переписывание старого кода.
Пример: вместо переписывания метода — создаём новый подкласс или внедряем стратегию.
— Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Объекты подклассов должны работать так же, как объекты родителя.
Если Square наследуется от Rectangle, он должен вести себя как прямоугольник, а не ломать ожидания.
Суть: наследование не должно рушить логику программы.
— Interface Segregation Principle (Принцип разделения интерфейсов)
Лучше много маленьких интерфейсов, чем один огромный.
Плохо: интерфейс IMachine с методами print(), scan(), fax().
Хорошо: IPrinter, IScanner, IFax. Каждый класс реализует только нужное.
— Dependency Inversion Principle (Принцип инверсии зависимостей)
Зависимости должны быть от абстракций, а не от конкретных классов.
Плохо: класс ReportGenerator напрямую вызывает MySQLDatabase.
Хорошо: ReportGenerator работает с интерфейсом Database, а уже конкретная БД подставляется снаружи.
Без SOLID код быстро превращается в спагетти, где одно изменение ломает всё.
💬 Пишите в комменты как вы объясняете, что такое SOLID
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥4🥱3⚡1😁1
🧩 Оптимизация кода с помощью Application Insights
В .NET теперь проще выявлять узкие места и оптимизировать производительность приложений благодаря обновлениям в Application Insights. Инструмент собирает данные о работе кода в реальном времени, помогает находить медленные участки, лишние аллокации и повторяющиеся операции.
➡️ Блог разработчиков
🐸 Библиотека шарписта
В .NET теперь проще выявлять узкие места и оптимизировать производительность приложений благодаря обновлениям в Application Insights. Инструмент собирает данные о работе кода в реальном времени, помогает находить медленные участки, лишние аллокации и повторяющиеся операции.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🧗 Кто такие Unit-лид и Technical Owner
Классическая связка «тимлид + продакт-менеджер» не справляется с ростом команд до 50-100+ человек и усложнением продуктов. На смену приходят роли, ориентированные на продуктовое мышление вместо простого исполнения задач.
Unit-лид функционирует как мини-CEO продуктового направления: управляет стратегией, а technical owner служит мостом между бизнесом и техникой.
Главное отличие от прошлого: специалисты не просто выполняют поставленные задачи, а понимают продукт целиком.
➡️ Подробнее про обе роли
🐸 Библиотека шарписта
Классическая связка «тимлид + продакт-менеджер» не справляется с ростом команд до 50-100+ человек и усложнением продуктов. На смену приходят роли, ориентированные на продуктовое мышление вместо простого исполнения задач.
Unit-лид функционирует как мини-CEO продуктового направления: управляет стратегией, а technical owner служит мостом между бизнесом и техникой.
Главное отличие от прошлого: специалисты не просто выполняют поставленные задачи, а понимают продукт целиком.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Включите EventPipe/PerfView/dotnet-trace для старта: какие сборки грузятся, на что тратится время.
Снимите таймлайны: «вход в Main → готовность endpoint'ов / UI».
Измеряйте Release-сборку, без отладчиков и без «горячих» кэшей.
• ReadyToRun (R2R)
Компилирует IL в машинный код при публикации:
<!-- Directory.Build.props или csproj -->
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode> <!-- для библиотек и DI -->
</PropertyGroup>
• PGO (Profile-Guided Optimization) + R2R
Соберите профиль и примените при crossgen2 (даёт лучший порядок/инлайнинг для «горячего» пути старта).
• NativeAOT
Полностью нативный бинарь, почти мгновенный старт. Подходит для CLI/служб с ограниченным набором фич и для «узких» сервисов или edge-эндпоинтов в вебе.
Уберите всё, что не нужно при старте: тяжёлые клиенты (БД, кеши, внешние SDK) создавайте лениво, после поднятия хостинга.
Прогружайте конфигурацию минимально: уберите лишние провайдеры, большие JSON-файлы, многократные AddJsonFile.
Логи на старте — только консоль/минимальный уровень, позже можно расширить.
Уберите неиспользуемые пакеты, объедините внутренние пакеты, избегайте древовидных зависимостей ради одной функции.
Встроенный контейнер быстрый, но следите за графом:
• Регайте Singleton/Scoped только когда нужно.
• Избегайте «сервисов-глобов» с большим конструктором на десятки зависимостей.
• Используйте фабрики/Lazy для тяжёлых зависимостей.
Минимальный хостинг и только нужные middleware:
var builder = WebApplication.CreateBuilder(args);
// Оставьте только то, что нужно для старта
builder.Services.AddRouting();
var app = builder.Build();
// Критичный middleware – ближе к началу конвейера
app.MapGet("/healthz", () => "OK");
app.Run();
Отключите всё, что делает работу на старте: избыточная авто-дискавери Swagger, отражение в валидации, сканирование сборок.
Разнесите готовность принимать трафик и полную готовность всех подсистем:
• Быстрый
/healthz
сразу.• Прогрев кэшей/метаданных — в фоне
IHostedService
с низким приоритетом.• В оркестраторе задайте
readinessProbe
после минимального старта, а «тяжёлый прогрев» делайте уже на фоне.PublishTrimmed=true
+ TrimMode=partial
часто снижает размер и ускоряет загрузку.Обязательно добавляйте
DynamicDependency
/UnconditionalSuppressMessage
/RD.XML
для сохранения типов, которые нужны через рефлексию (DI/JSON/ORM).💬 А у вас сколько секунд уходит на холодный старт .NET сервиса?
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤2🔥2❤🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁28❤🔥13💯10👾1
Часто не хочется писать шаблонный код и будто для этого и были придуманы нейросети. Сегодня делимся с вами промптом для разбавления рутины.
Промпт для генерации DTO:
Сгенерируй DTO класс на C# с публичными свойствами для объекта, содержащего следующие поля: {подставить полный список свойств}. Класс должен иметь комментарии для каждого свойства, описывающие его назначение. Используй стандартные соглашения оформления C# для именования классов и свойств.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚10😁7🥱3🙏2
This media is not supported in your browser
VIEW IN TELEGRAM
📅 24 сентября в 19:00 МСК — бесплатный вебинар с Максимом Шаланкиным.
Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».
🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.
Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏
👉 Регистрируйтесь через форму на лендинге
Тема: «ИИ-агенты: новая фаза развития искусственного интеллекта».
🔹 Почему все говорят про ИИ-агентов и куда вливаются миллиарды инвестиций.
🔹 Чем они отличаются от ChatGPT и обычных ботов.
🔹 Как работает цикл агента: восприятие → планирование → действие → обучение.
🔹 Живое демо простого агента.
🔹 Потенциал для бизнеса: автоматизация процессов и ROI до 80%.
Не придёшь — будешь потом рассказывать, что «агенты — это как чат-боты», и ловить косые взгляды от коллег 😏
👉 Регистрируйтесь через форму на лендинге
😢2
📊 Почему сайты тормозят: фронтенд ли
Сегодня большинство сайтов загружаются 3–5 секунд. Для пользователя это уже привычно, но для бизнеса — потерянные клиенты и деньги. И дело не только во фронтенде: корень проблемы иногда глубже — в бэкенде.
Что влияет на скорость ответа:
• неоптимизированные запросы к базе
• тяжёлые API-эндпоинты
• отсутствие кэша или его неправильная реализация
• перегрузка серверов и медленные очереди
Фронтенд может ужать картинки и ускорить отрисовку, но если бэкенд думает по 2 секунды на запрос — сайт всё равно будет тормозить.
💬 Как вы относитесь к этой проблеме и что делаете в своих проектах, чтобы бэкенд не становился узким местом?
🐸 Библиотека шарписта
#entry_point
Сегодня большинство сайтов загружаются 3–5 секунд. Для пользователя это уже привычно, но для бизнеса — потерянные клиенты и деньги. И дело не только во фронтенде: корень проблемы иногда глубже — в бэкенде.
Что влияет на скорость ответа:
• неоптимизированные запросы к базе
• тяжёлые API-эндпоинты
• отсутствие кэша или его неправильная реализация
• перегрузка серверов и медленные очереди
Фронтенд может ужать картинки и ускорить отрисовку, но если бэкенд думает по 2 секунды на запрос — сайт всё равно будет тормозить.
💬 Как вы относитесь к этой проблеме и что делаете в своих проектах, чтобы бэкенд не становился узким местом?
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Please open Telegram to view this post
VIEW IN TELEGRAM
👏34❤8💯8🥱3🔥1
🔄 Поддержка релизов .NET STS теперь 24 месяца
Microsoft увеличивает срок поддержки релизов .NET с типом Short Term Support с 18 до 24 месяцев. Это означает, что .NET 9, выпущенный 12 ноября 2024 года, будет поддерживаться до 10 ноября 2026 года — на 6 месяцев дольше, чем планировалось ранее.
LTS-релизы сохраняют прежнюю политику: поддержка в течение 36 месяцев или 12 месяцев после выпуска следующего релиза.
➡️ Блог разработчиков
🐸 Библиотека шарписта
#async_news
Microsoft увеличивает срок поддержки релизов .NET с типом Short Term Support с 18 до 24 месяцев. Это означает, что .NET 9, выпущенный 12 ноября 2024 года, будет поддерживаться до 10 ноября 2026 года — на 6 месяцев дольше, чем планировалось ранее.
LTS-релизы сохраняют прежнюю политику: поддержка в течение 36 месяцев или 12 месяцев после выпуска следующего релиза.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥1
⚡️ Бесплатный вебинар — ИИ-агенты: новая фаза развития AI
24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.
Тема:
На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.
Подробности рассказываем в гс выше — включай, чтобы не пропустить.
24 сентября в 19:00 МСК состоится бесплатный вебинар с Максимом Шаланкиным — Data Science Team Lead в финтех-команде MWS, а познакомиться с ним ближе можно в его тг-канале.
Тема:
«ИИ-агенты: новая фаза развития искусственного интеллекта».
На вебинаре разберёмся, почему агенты — это следующий шаг после ChatGPT, чем они отличаются от обычных моделей и как уже приносят бизнесу ROI до 80%. А дальше я покажу, как эта тема ложится в наш курс по ИИ-агентам, который разработан под руководством Никиты Зелинского.
Подробности рассказываем в гс выше — включай, чтобы не пропустить.
GitHub Copilot теперь можно настроить с помощью Instruction Files и Prompt Files, чтобы AI генерировал код в соответствии с вашими стандартами и требованиями проекта.
Файлы с инструкциями задают общие правила для репозитория: стиль кода, соглашения по именам, обязательные тесты, ограничения на изменения и инструкции по CI/CD.
Их удобно использовать для командной работы и open-source-проектов, чтобы все предложения Copilot соответствовали принятым стандартам.
#sharp_view
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🦸 Wolverine 5.0: релиз 1 октября
В новой версии будет реализована поддержка Redis как транспортного механизма для сообщений, улучшена совместимость с различными хранилищами сообщений и проведена работа над Dead Letter Queue в рамках проекта CritterWatch.
После релиза Wolverine 5.0 проект CritterWatch станет основным техническим фокусом Джереми Миллера и JasperFx на оставшуюся часть года.
➡️ Блог разработчика
🐸 Библиотека шарписта
#async_news
В новой версии будет реализована поддержка Redis как транспортного механизма для сообщений, улучшена совместимость с различными хранилищами сообщений и проведена работа над Dead Letter Queue в рамках проекта CritterWatch.
После релиза Wolverine 5.0 проект CritterWatch станет основным техническим фокусом Джереми Миллера и JasperFx на оставшуюся часть года.
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥3🥰1
Недавно мы делились новостью о выходе .NET 10 RC1. Теперь пришло время посмотреть глубже: что именно изменилось, какие улучшения можно опробовать уже сейчас.
Повышение производительности без усилий
• Улучшения в рантайме и JIT-компиляторе, благодаря которым уже существующий код работает быстрее при перекомпиляции, без изменения кода.
• «Deabstraction»: устранение накладных расходов за счёт оптимизации интерфейсов, лямбд, async, итераторов и др.
• Расширенный «escape analysis», позволяющее небольшие объекты размещать в стеке, а не на куче, что уменьшает нагрузку на garbage collector.
Улучшения рантайма и GC
• Поддержка AVX 10.2 инструкций — подготавливает платформу к современному железу.
• Оптимизация фонового GC, улучшение сжатия памяти и управления фрагментацией.
Безопасность и квантовая устойчивость
• Внедрение апи для пост-квантовой криптографии.
• Новый алгоритм цифровой подписи ML-DSA (основанный на решёточных структурах), стандартизированный NIST.
Новые возможности для разработчиков и приложений
• ASP.NET Core: более детальная телеметрия/метрики по аутентификации, токенам и двухфакторке, что облегчает выявление атак типа «credential stuffing», брут форс и др.
• EF Core: поддержка векторного поиска и нативного JSON в SQL Server — полезно для AI и полуструктурированных данных.
• .NET MAUI: метрики на уровне UI-layout операций (Measure, Arrange) — помогает обнаружить ботлнеки интерфейса.
C# 14 — язык становится дружелюбнее и эффективнее
• Возможность использовать params не только с массивами, но и со Span для уменьшения аллокаций.
• Новый field-контекст в свойствах упрощает код, убирает явное объявление «backing field» — меньше шаблонов, меньше шума.
Язык и среда .NET движутся в сторону объединения удобства и производительности: абстракции остаются, но их накладные расходы всё больше уходят.
#il_люминатор
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤6⚡2🥰1
📰 Недельная подборка
Прошла неделя и мы снова собрали для вас материалы для прочтения на досуге.
— Cake.Sdk теперь умеет dotnet publish
Вышла бета Cake.Sdk 5.0.25257.82, и главная новость — поддержка dotnet publish. Теперь можно собирать self-contained бинарники и даже контейнеры прямо из Cake-скриптов, без необходимости ставить .NET Runtime на целевой машине.
— Цена пропущенного ? в C#
На примере open source-проекта Stability Matrix автор показывает ошибки в конструкторах и инициализации, где невинный ? или проверка на null могли бы предотвратить баги и NaN в расчётах.
— Кто такие Unit-лид и Technical Owner
— Microsoft увеличивает срок поддержки релизов
— Wolverine 5.0
🐸 Библиотека шарписта
#async_news
Прошла неделя и мы снова собрали для вас материалы для прочтения на досуге.
— Cake.Sdk теперь умеет dotnet publish
Вышла бета Cake.Sdk 5.0.25257.82, и главная новость — поддержка dotnet publish. Теперь можно собирать self-contained бинарники и даже контейнеры прямо из Cake-скриптов, без необходимости ставить .NET Runtime на целевой машине.
— Цена пропущенного ? в C#
На примере open source-проекта Stability Matrix автор показывает ошибки в конструкторах и инициализации, где невинный ? или проверка на null могли бы предотвратить баги и NaN в расчётах.
— Кто такие Unit-лид и Technical Owner
— Microsoft увеличивает срок поддержки релизов
— Wolverine 5.0
#async_news
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Давайте собирать библиотеку вместе. Выбираем тему, которая станет главным фокусом контента на ближайшие 7 дней. 👇
#entry_point
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🥱3😢2💯1