uk
Feedback
C# 1001 notes

C# 1001 notes

Відкрити в Telegram

Регулярные короткие заметки по C# и .NET. Просто о сложном для каждого. admin - @haarrp

Показати більше
6 539
Підписники
-324 години
-17 днів
-230 день
Архів дописів
🔐 RBAC (Role-Based Access Control) в действии Как работает RBAC: - Роли получают набор разрешений - Пользователи получают ро
🔐 RBAC (Role-Based Access Control) в действии Как работает RBAC: - Роли получают набор разрешений - Пользователи получают роли → а значит и разрешения - Разрешения определяют, что пользователь может или не может делать 📌 Поток авторизации: 1. Пользователь проходит аутентификацию 2. Получает access token (JWT) 3. Делает API-запрос с токеном 4. Токен преобразуется в claims 5. Проверка прав (authorize) 6. Ответ API ⚡ Пример обработчика RBAC в C#:

internal sealed class PermissionAuthorizationHandler 
    : AuthorizationHandler<PermissionRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        PermissionRequirement requirement)
    {
        HashSet<string> permissions = context.User.GetPermissions();

        if (permissions.Contains(requirement.Permission))
        {
            context.Succeed(requirement);
        }
        return Task.CompletedTask;
    }
}

⚙️ Микросервисы начинают тормозить под нагрузкой? 💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Ev
⚙️ Микросервисы начинают тормозить под нагрузкой? 💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire. На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем: ◽️ Ограничения классических микросервисов при высокой нагрузке. ◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing. ◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB. ◽️ Конфигурацию проекций для чтения данных. ❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий. ➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://otus.pw/XyHp/?erid=2W5zFJisCGG Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🖥 Большинство .NET разработчиков никогда с этим не сталкиваются. Но это делает отладку в 10 раз проще. Стандартный вид при о
🖥 Большинство .NET разработчиков никогда с этим не сталкиваются. Но это делает отладку в 10 раз проще. Стандартный вид при отладке:
{Namespace.ObjectName}
Никакого контекста. Много путаницы. Но всего одной строкой кода? Теперь окно наблюдения показывает:

Order ORD-2025-002: Bob Evans - 89.50
Order ORD-2025-003: Maria Lee - 1200.00
В чём фишка? Используйте DebuggerDisplay. Добавляете этот атрибут в начало класса, чтобы контролировать, как будет отображаться информация о классе при отладке. В следующий раз, когда будете смотреть на {Namespace.ObjectName}, помните: так не обязательно должно быть.

⚙️☝️ Вебинар: Как Solidity обеспечивает доверие и прозрачность в взаимодействии пользователей ⏰ 19 августа в 20:00 МСК мы раз
⚙️☝️ Вебинар: Как Solidity обеспечивает доверие и прозрачность в взаимодействии пользователей19 августа в 20:00 МСК мы разберемся, как технология блокчейн и смарт-контракты создают доверенную среду для всех участников. На примере реальных кейсов мы покажем, как эта технология применяется в децентрализованных финансах, голосованиях, управлении поставками и других критичных областях, где важна надежность и предсказуемость операций. 💪 Мы расскажем, как писать прозрачные и надежные системы для самых актуальных и перспективных технологий. Запишитесь на вебинар и повышайте свою ценность на рынке. Все участникии получат индивидуальное предложение на курс «Solidity Developer». 👉 Для участия зарегистрируйтесь: https://otus.pw/Tdr7/?erid=2W5zFJetmkk Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

📌 Как из HTML сгенерировать PDF в .NET с помощью PuppeteerSharp и Handlebars Этот пример показывает, как взять HTML-шаблон,
📌 Как из HTML сгенерировать PDF в .NET с помощью PuppeteerSharp и Handlebars Этот пример показывает, как взять HTML-шаблон, подставить данные через Handlebars и преобразовать его в PDF с помощью PuppeteerSharp. - Читаем HTML-шаблон InvoiceTemplate.html и компилируем его в функцию. - Подставляем данные, получаем готовый HTML. - PuppeteerSharp скачивает Chromium. - Открываем браузер в headless-режиме, создаём страницу, загружаем туда HTML. - Сохраняем страницу как PDF в формате A4, с фоном и нужными отступами. Код:

var template = File.ReadAllText("Templates/InvoiceTemplate.html");
var compiled = Handlebars.Compile(template);
string html = compiled(data);

// Скачать Chromium
var fetcher = new BrowserFetcher();
await fetcher.DownloadAsync();

// Рендер в PDF
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();
await page.SetContentAsync(html);
byte[] pdf = await page.PdfDataAsync(new PdfOptions {
    Format = PaperFormat.A4,
    PrintBackground = true,
    MarginOptions = new MarginOptions { Top = "50px", Right = "20px", Bottom = "50px", Left = "20px" }
});
Таким образом можно автоматизировать генерацию счётов, отчётов или любых документов из HTML прямо в C#.

🔥 От разработчика до архитектора высоконагруженных систем! 🚀 Высоконагруженные системы — необходимость для крупных проектов
🔥 От разработчика до архитектора высоконагруженных систем! 🚀 Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS. Вы научитесь: ✅ Проектировать масштабируемые системы, способные обрабатывать миллионы запросов ✅ Оптимизировать производительность и работать с отказоустойчивыми архитектурами ✅ Использовать современные инструменты и технологии для создания высоконагруженных решений ✅ Применять лучшие практики в проектировании и разработке серверных приложений 📌 Пройдите тест и получите скидку на курс!  Подробности уточняйте у менеджера 👉 Пройти тест https://otus.pw/PsxZ/?erid=2W5zFJUR9X6 Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🖥 Полезная фишка в C#, о которой никто не знает Этот прием позволяет создавать высокопроизводительные .NET-приложения. Разра
🖥 Полезная фишка в C#, о которой никто не знает Этот прием позволяет создавать высокопроизводительные .NET-приложения. Разработка надёжных, масштабируемых и быстрых .NET-приложений во многом зависит от того, как вы организуете конкуренцию и обработку данных. Во время разработки .NET-приложений часто возникает необходимость передавать данные из одной части кода в другую. Ранее для этого использовали такие конструкции, как Queue<T>, ConcurrentQueue<T> или BlockingCollection<T>. Эти очереди оборачивали в классы и применяли для управления потоками данных. Однако у таких решений есть существенный минус — сильная связанность кода. 💊 Channels в C# это малоизвестная, но мощная фишка, которая предлагает современный способ построения безопасных, асинхронных и высоконагруженных .NET-приложений. Они реализуют паттерн "производитель-потребитель": один класс создаёт данные, другой их потребляет - при этом оба ничего не знают друг о друге. Ключевым архитектурным моментом при работе с каналами является выбор между ограниченными и неограниченными каналами. В этом гайд, где узнаете: 🟠Что такое C# Channels? 🟠 Ограниченные vs. неограниченные каналы 🟠 Фоновая обработка через Channels 🟠 Применение каналов в боевом ASP.NET Core-приложении 🟠 Лучшие практики и советы по работе с Channels

Ваши коллеги уже изучают .NET 10 → а вы готовы остаться на старых версиях? Каждый релиз .NET приносит десятки нововведений, к
Ваши коллеги уже изучают .NET 10 → а вы готовы остаться на старых версиях? Каждый релиз .NET приносит десятки нововведений, которые меняют подходы к разработке. Пока одни программисты осваивают новый синтаксис C# 14 и возможности runtime, другие продолжают писать код «по-старому» и удивляются, почему их решения выглядят устаревшими. .NET 10 — это не просто очередное обновление. Это LTS-версия, которая задаст стандарты разработки на ближайшие годы. Новый синтаксический сахар, field и extension в C# 14, обновления в MAUI и EF Core — всё это уже меняет то, как пишут современные приложения. Вебинар «Что нового в .NET 10 для разработчиков» в рамках курса «C# углубленный» → 18 августа, 20:00 → Антон Герасименко Программа: → Обзор ключевых нововведений .NET 10 и их практическое применение → Синтаксические конструкции C# 14: сахар, field, extension → Изменения в runtime и их влияние на производительность приложений  → Новые возможности MAUI и EF Core для современной разработки После вебинара вы поймёте, как адаптировать свой код под новые стандарты, сможете читать и писать современный C# код и не будете отставать от коллег, которые уже перешли на актуальные версии. Бесплатная регистрация — займите место в числе первых: https://otus.pw/MPD1A/?erid=2W5zFHPhUCQ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

⚙️ Утилиты для асинхронного программирования в .NET Если ты работаешь с async/await и хочешь писать более чистый, безопасный
⚙️ Утилиты для асинхронного программирования в .NET Если ты работаешь с async/await и хочешь писать более чистый, безопасный и удобный код — попробуй AsyncEx. Это мощная библиотека с готовыми асинхронными инструментами: 🔒 AsyncLock — асинхронный мьютекс: синхронизирует доступ к ресурсу *без блокировки потока*. 🚦 AsyncSemaphore — ограничивает количество одновременно выполняющихся задач, но *в асинхронной манере*. 📦 AsyncLazy — отложенная инициализация, которая запускается только при первом вызове. Работает в `async`-контексте. 📡 AsyncConditionVariable — асинхронная переменная состояния: удобно ожидать/уведомлять задачи о смене состояния ресурса. 📣 AsyncEvent — асинхронные события: подписка и вызов обработчиков без блокировки. 🧰 TaskHelper — утилиты для работы с задачами: ожидание, отмена, управление результатами. 🚀 Как начать? Просто установи через NuGet: https://github.com/StephenCleary/AsyncEx

💻 Мониторинг в высоконагруженных проектах 🔧 🔥 12 августа в 20:00 мск — открытый вебинар в OTUS. На вебинаре рассмотрим: -
💻 Мониторинг в высоконагруженных проектах 🔧 🔥 12 августа в 20:00 мск — открытый вебинар в OTUS. На вебинаре рассмотрим: - Почему мониторинг — ключ к стабильности высоконагруженных систем? - Методы и инструменты мониторинга, подходящие для проектов с высокой нагрузкой. - Как настроить и оптимизировать мониторинг для выявления и предотвращения проблем. - Как эффективно использовать метрики и логи для улучшения производительности. - Реальные кейсы мониторинга в сложных системах. 🎓 После вебинара вы: - Научитесь правильно настраивать мониторинг для высоконагруженных проектов. - Узнаете, как использовать данные мониторинга для повышения производительности и стабильности систем. - Получите практические рекомендации по оптимизации мониторинга. 🔧 Присоединяйтесь, чтобы научиться отслеживать и поддерживать стабильность систем, работающих под высокой нагрузкой! 🎁Все участники получат шаблон развертывания кластера RabbitMQ 👉 Регистрация https://otus.pw/2yrT/?erid=2W5zFJQ6ube Бесплатное занятие приурочено к старту курса Highload Architect Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🧰 .NET Community Toolkit — полезная коллекция библиотек и API для .NET-разработчиков, созданная Microsoft и поддерживаемая с
🧰 .NET Community Toolkit — полезная коллекция библиотек и API для .NET-разработчиков, созданная Microsoft и поддерживаемая сообществом. Этот набор инструментов не привязан к конкретному UI-фреймворку, а значит, его можно использовать в любых проектах — от десктопных приложений до веб-решений. Среди ключевых компонентов — CommunityToolkit.Mvvm (облегченная MVVM-библиотека, наследник MvvmLight), CommunityToolkit.HighPerformance (оптимизации для работы с памятью и многопоточностью) и CommunityToolkit.Diagnostics (удобные методы валидации). При этом все инструменты уже применяются в реальных продуктах Microsoft, включая новый Microsoft Store. Разработчики могут легко подключить NuGet-пакеты через Visual Studio, а документация доступна на Microsoft Docs. Планы по развитию публикуются в Roadmap, а для тестирования новых функций можно подключить пререлизные сборки. 🤖 GitHub

На E-CODE одно из фокусных направлений — C#. Доклады экспертов на главном IT-событии осени будут в треке Backend 💙 Заходите смотреть программу и регистрироваться — места улетают стремительно. Успех ждёт middle+ инженеров — команда Ozon Tech собирает в пространстве E-CODE профессиональное комьюнити. Общаться, меняться опытом и контактами, находить идеи и своё место в этом большом мире IT. Или хотя бы у сцены — в лайнапе E-CODE НТР, Заточка, ILWT и Нейромонах Феофан. E-CODE — событие, на котором вам стоит побывать. Зарегистрироваться.

🔥 Лучшая фича в ASP .NET Core 10 — Server-Sent Events (SSE) SSE — это упрощённая альтернатива SignalR: стриминг данных с сер
🔥 Лучшая фича в ASP .NET Core 10 — Server-Sent Events (SSE) SSE — это упрощённая альтернатива SignalR: стриминг данных с сервера к клиенту через обычный HTTP. 🔑 Плюсы SSE: ➡️ Односторонняя передача: только сервер → клиент ➡️ Работает через обычный HTTP (тип `text/event-stream`) ➡️ Не требует WebSocket-рукопожатия ➡️ Браузеры автоматически переподключаются ➡️ Очень низкие накладные расходы 🧪 Можно тестировать прямо через curl, Postman, Apidog, или HTTP request-файлы в IDE. Поддерживается во всех основных браузерах. 📌 Когда использовать SSE: ☑️ Лайв-ленты: акции, спорт, новости ☑️ Реальные уведомления: соцсети, алерты ☑️ Отслеживание прогресса: загрузки, долгие операции ☑️ Лайв-дэшборды: мониторинг, аналитика SSE идеально подходит, когда нужно пушить данные с сервера, но не нужен full-duplex как в WebSockets. 📦 Я сделал пример — Live Stock Market с исходниками для фронта и бэка. Пиши, если интересно!

🔍 Anton DevTips делится 650+ эксклюзивными бесплатными материалами для прокачки C#, .NET, ASP .NET Core, EF Core и микросерв
🔍 Anton DevTips делится 650+ эксклюзивными бесплатными материалами для прокачки C#, .NET, ASP .NET Core, EF Core и микросервисов: Отдельные статьи и примеры из подборки: - Structured Logging & Distributed Tracing в микросервисах ↳ https://antondevtips.com/blog/how-to-implement-structured-logging-and-distributed-tracing-for-microservices-with-seq - Server-Sent Events в ASP .NET Core 10 ↳ https://antondevtips.com/blog/real-time-server-sent-events-in-asp-net-core - Логирование API-запросов и ответов ↳ https://antondevtips.com/blog/logging-requests-and-responses-for-api-requests-and-httpclient-in-aspnetcore - GraphQL c HotChocolate ↳ https://antondevtips.com/blog/getting-started-with-hot-chocolate-graphql - WebAPI на FastEndpoints + Vertical Slice ↳ https://antondevtips.com/blog/productive-web-api-development-with-fast-endpoints-and-vertical-slice-architecture-in-dotnet - AI-чат-бот на OpenAI + Postgres ↳ https://antondevtips.com/blog/building-multimodel-ai-chat-bot-in-dotnet-with-chat-gpt-and-database-branching-in-neon-postgres - Мультитенант в Azure Functions ↳ https://antondevtips.com/blog/building-a-multitenant-cloud-application-with-azure-functions-and-neon-postgres - Snapshot-тестирование с Verify ↳ https://antondevtips.com/blog/how-to-simplify-assertions-in-unit-and-integration-tests-with-verify-in-dotnet - Интеграционные тесты c WireMock ↳ https://antondevtips.com/blog/how-to-test-integrations-with-apis-using-wiremock-in-dotnet - Best Practices для ASP .NET Core Integration Testing ↳ https://antondevtips.com/blog/asp-net-core-integration-testing-best-practises?utm_source=linkedin&utm_medium=social&utm_campaign=01-04-2025 - MongoDB + .NET: практики ↳ https://antondevtips.com/blog/best-practices-when-working-with-mongodb-in-dotnet - CLI-приложения на .NET ↳ https://antondevtips.com/blog/how-to-create-command-line-console-applications-in-dotnet - Кастомизация ASP .NET Core Identity ↳ https://antondevtips.com/blog/how-to-customize-aspnet-core-identity-with-efcore-for-your-project-needs - Миграции для нескольких БД в EF Core ↳ https://antondevtips.com/blog/how-to-create-migrations-for-multiple-databases-in-ef-core - Управление жизненным циклом DbContext ↳ https://antondevtips.com/blog/how-to-manage-ef-core-dbcontext-lifetime - Views, Stored Procedures и Functions в EF Core ↳ https://antondevtips.com/blog/calling-views-stored-procedures-and-functions-in-ef-core ✔️ PDF-сборник ресурсов — docs, туториалы, блоги, видео ↳ https://anton-devtips.kit.com/dotnet-resources?utm_source=linkedin&utm_medium=social&utm_campaign=dotnet-resources-july-2025

🧼 Как элегантно работать с конфигами в .NET? Раньше я просто тянул значения напрямую из IConfiguration. Это быстро надоедает
🧼 Как элегантно работать с конфигами в .NET? Раньше я просто тянул значения напрямую из IConfiguration. Это быстро надоедает: много повторений, легко ошибиться, сложно валидировать. Сейчас всегда использую Options pattern — и вот почему: ✅ Привязываешь конфигурацию к строго типизированным классам ✅ Добавляешь валидацию через аннотации ✅ Чисто внедряешь настройки через DI (`IOptions<T>` или `IOptionsSnapshot<T>`) Отлично работает для: - appsettings.json - фичефлагов - конфигов внешних сервисов Если хочешь чистый и масштабируемый код — лучше подхода пока нет.

🔥 𝟮𝟬 Полезных статей для изучения ASP.NET Core 1. Как заменить исключения на Result-паттерн ↳ https://antondevtips.com/blog/how-to-replace-exceptions-with-result-pattern-in-dotnet 2. Как логировать запросы и ответы API ↳ https://antondevtips.com/blog/logging-requests-and-responses-for-api-requests-and-httpclient-in-aspnetcore 3. Как реализовать refresh-токены и отзыв токенов ↳ https://antondevtips.com/blog/how-to-implement-refresh-tokens-and-token-revocation-in-aspnetcore 4. Как создавать и конвертировать PDF-документы ↳ https://antondevtips.com/blog/how-to-create-and-convert-pdf-documents-in-aspnetcore 5. Как писать собственные middleware ↳ https://antondevtips.com/blog/how-to-create-custom-middlewares-in-asp-net-core 6. Серверные события в реальном времени (SSE) ↳ https://antondevtips.com/blog/real-time-server-sent-events-in-asp-net-core 7. Лучшие практики аутентификации и авторизации ↳ https://antondevtips.com/blog/authentication-and-authorization-best-practices-in-aspnetcore 8. Лучший способ маппинга объектов ↳ https://antondevtips.com/blog/the-best-way-to-map-objects-in-dotnet-in-2024 9. Лучший способ валидации объектов ↳ https://antondevtips.com/blog/the-best-way-to-validate-objects-in-dotnet-in-2024 10. Паттерн Options и работа с конфигурацией ↳ https://antondevtips.com/blog/master-configuration-in-asp-net-core-with-the-options-pattern 11. Как повысить производительность Web API ↳ https://antondevtips.com/blog/how-to-increase-performance-of-web-apis-in-dotnet 12. 15 типичных ошибок при создании Web API ↳ https://antondevtips.com/blog/top-15-mistakes-developers-make-when-creating-web-apis 13. Как реализовать кэширование ↳ https://antondevtips.com/blog/how-to-implement-caching-strategies-in-dotnet 14. Быстрый старт с FastEndpoints ↳ https://antondevtips.com/blog/getting-started-with-fastendpoints-for-building-web-apis-in-dotnet 15. Деплой приложений .NET в Azure через Aspire ↳ https://antondevtips.com/blog/how-to-deploy-dotnet-application-to-azure-using-neon-postgres-and-dotnet-aspire 16. 15 ошибок, которые совершают .NET-разработчики ↳ https://antondevtips.com/blog/top-15-mistakes-dotnet-developers-make-how-to-avoid-common-pitfalls 17. Лучшие практики повышения качества кода ↳ https://antondevtips.com/blog/best-practices-for-increasing-code-quality-in-dotnet-projects 18. Как создать мультиарендное приложение ↳ https://antondevtips.com/blog/how-to-implement-multitenancy-in-asp-net-core-with-ef-core 19. Архитектура на основе вертикальных срезов ↳ https://antondevtips.com/blog/vertical-slice-architecture-the-best-ways-to-structure-your-project 20. Как структурировать проект с Clean Architecture + Vertical Slices ↳ https://antondevtips.com/blog/the-best-way-to-structure-your-dotnet-projects-with-clean-architecture-and-vertical-slices 📥 Скачать дорожную карту по ASP.NET Core на 2025 год: ↳ https://antondevtips.com/roadmap/aspnetcore?utm_source=linkedin&utm_medium=social&utm_campaign=aspnetcore-roadmap-2025

🧠 Задача: "Сколько раз выполнится блок Console.WriteLine?"

public class Program
{
    public static void Main()
    {
        var obj = new Counter();
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(obj++);
        }
    }
}

public class Counter
{
    private int _value = 0;

    public static Counter operator ++(Counter c)
    {
        c._value++;
        return c;
    }

    public static implicit operator int(Counter c)
    {
        return c._value;
    }
}
❓Вопрос: Что выведет программа? 🔍 Разбор: На первый взгляд кажется, что программа выведет: 1 2 3 📎 Но на самом деле она выведет: 0 1 2 Почему? Оператор obj++ — это постфиксный инкремент. Он: сначала вызывает implicit operator int для текущего значения, а затем вызывает operator ++. То есть порядок такой: Console.WriteLine(obj++) вызывает implicit int до инкремента только потом ++ увеличивает значение. ✅ Что это проверяет: Знание порядка вызова операторов (++ и implicit) Понимание поведения постфиксных операций в .NET Умение читать и анализировать перегрузки операторов @csharp_1001_notes

Хотите разобраться в тестировании API на ASP.NET Core? ➡️ Присоединяйтесь к открытому уроку «Тестирование API в ASP.NET Core:
Хотите разобраться в тестировании API на ASP.NET Core? ➡️ Присоединяйтесь к открытому уроку «Тестирование API в ASP.NET Core: Интеграция и Нагрузка» 5 августа в 20:00 МСК. На вебинаре мы: - Разберем ключевые концепции интеграционного и нагрузочного тестирования. - Научимся писать интеграционные тесты с популярными библиотеками. - Освоим инструменты для нагрузочного тестирования и анализа результатов. 📗 Этот урок — отличная подготовка к курсу «C# ASP.NET Core разработчик», который стартует совсем скоро. Все участники вебинара получат скидку на обучение! Записаться на вебинар → https://otus.pw/sqqO/?erid=2W5zFHob1Sg Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

Правильный способ построения асинхронных API в .NET Большинство API работают по простому шаблону: 🔸Клиент отправляет запрос
Правильный способ построения асинхронных API в .NET Большинство API работают по простому шаблону: 🔸Клиент отправляет запрос 🔸Сервер выполняет работу 🔸Сервер возвращает ответ Такой подход отлично работает для быстрых операций — например, получения данных или простых обновлений. А что насчёт длительных операций? Речь о задачах вроде: > обработки больших файлов > генерации отчётов > конвертации видео Такие процессы могут занимать от нескольких минут до часов. Вот как можно правильно строить асинхронные API: читать Как сообщить клиенту, что его запрос обработан? Есть два подхода: 🔸PULL — клиент опрашивает API, чтобы узнать статус 🔸PUSH — сервер сам уведомляет клиента (через WebSocket, email и т.д.)

Рефлексия тормозит приложения? Пора управлять компилятором! Устали писать одинаковый код снова и снова? Рефлексия съедает про
Рефлексия тормозит приложения? Пора управлять компилятором! Устали писать одинаковый код снова и снова? Рефлексия съедает производительность в рантайме, а генерация boilerplate-кода отнимает часы. Современный C# предлагает элегантное решение — заставить компилятор работать на вас. 🎥 Вебинар «Заставьте компилятор работать на вас: магия метапрограммирования с Source Generators в C#» 📅 6 августа, 20:00 👩‍🏫 Елена Сычева Разберём на практике: → Почему рефлексия — узкое место и как Source Generators решают проблему на этапе компиляции → Устройство компилятора Roslyn: синтаксические деревья и семантическая модель → Live-coding первого Source Generator для избавления от рутинного кода → Применение генераторов в популярных библиотеках .NET 7+ Результат: вы научитесь создавать собственные генераторы кода, которые автоматизируют рутину и повышают производительность приложений без runtime-накладных расходов. Вебинар проходит в рамках курса «C# углубленный» — участники получают эксклюзивные условия обучения. → Регистрация: https://otus.pw/X1GN/ Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963