⚙️ Утилиты для асинхронного программирования в .NET
Если ты работаешь с
Это мощная библиотека с готовыми асинхронными инструментами:
🔒 AsyncLock — асинхронный мьютекс: синхронизирует доступ к ресурсу *без блокировки потока*.
🚦 AsyncSemaphore — ограничивает количество одновременно выполняющихся задач, но *в асинхронной манере*.
📦 AsyncLazy — отложенная инициализация, которая запускается только при первом вызове. Работает в `async`-контексте.
📡 AsyncConditionVariable — асинхронная переменная состояния: удобно ожидать/уведомлять задачи о смене состояния ресурса.
📣 AsyncEvent — асинхронные события: подписка и вызов обработчиков без блокировки.
🧰 TaskHelper — утилиты для работы с задачами: ожидание, отмена, управление результатами.
🚀 Как начать?
Просто установи через NuGet:
https://github.com/StephenCleary/AsyncEx
Если ты работаешь с
async/await
и хочешь писать более чистый, безопасный и удобный код — попробуй AsyncEx.Это мощная библиотека с готовыми асинхронными инструментами:
🔒 AsyncLock — асинхронный мьютекс: синхронизирует доступ к ресурсу *без блокировки потока*.
🚦 AsyncSemaphore — ограничивает количество одновременно выполняющихся задач, но *в асинхронной манере*.
📦 AsyncLazy — отложенная инициализация, которая запускается только при первом вызове. Работает в `async`-контексте.
📡 AsyncConditionVariable — асинхронная переменная состояния: удобно ожидать/уведомлять задачи о смене состояния ресурса.
📣 AsyncEvent — асинхронные события: подписка и вызов обработчиков без блокировки.
🧰 TaskHelper — утилиты для работы с задачами: ожидание, отмена, управление результатами.
🚀 Как начать?
Просто установи через NuGet:
https://github.com/StephenCleary/AsyncEx
Ваши коллеги уже изучают .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 приносит десятки нововведений, которые меняют подходы к разработке. Пока одни программисты осваивают новый синтаксис 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-приложения.
Разработка надёжных, масштабируемых и быстрых .NET-приложений во многом зависит от того, как вы организуете конкуренцию и обработку данных.
Во время разработки .NET-приложений часто возникает необходимость передавать данные из одной части кода в другую.
Ранее для этого использовали такие конструкции, как
Queue<T>
, ConcurrentQueue<T>
или BlockingCollection<T>
.Эти очереди оборачивали в классы и применяли для управления потоками данных.
Однако у таких решений есть существенный минус — сильная связанность кода.
Channels в C# это малоизвестная, но мощная фишка, которая предлагает современный способ построения безопасных, асинхронных и высоконагруженных .NET-приложений.
Они реализуют паттерн "производитель-потребитель": один класс создаёт данные, другой их потребляет - при этом оба ничего не знают друг о друге.
Ключевым архитектурным моментом при работе с каналами является выбор между ограниченными и неограниченными каналами.
В этом гайд, где узнаете:
ASP.NET Core
-приложенииPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥 От разработчика до архитектора высоконагруженных систем! 🚀
Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS.
Вы научитесь:
✅ Проектировать масштабируемые системы, способные обрабатывать миллионы запросов
✅ Оптимизировать производительность и работать с отказоустойчивыми архитектурами
✅ Использовать современные инструменты и технологии для создания высоконагруженных решений
✅ Применять лучшие практики в проектировании и разработке серверных приложений
📌 Пройдите тест и получите скидку на курс! Подробности уточняйте у менеджера
👉 Пройти тест https://otus.pw/PsxZ/?erid=2W5zFJUR9X6
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Высоконагруженные системы — необходимость для крупных проектов. Пройдите тест, проверьте свои знания и получите скидку на курс «Highload Architect» от OTUS.
Вы научитесь:
✅ Проектировать масштабируемые системы, способные обрабатывать миллионы запросов
✅ Оптимизировать производительность и работать с отказоустойчивыми архитектурами
✅ Использовать современные инструменты и технологии для создания высоконагруженных решений
✅ Применять лучшие практики в проектировании и разработке серверных приложений
📌 Пройдите тест и получите скидку на курс! Подробности уточняйте у менеджера
👉 Пройти тест https://otus.pw/PsxZ/?erid=2W5zFJUR9X6
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
📌 Как из HTML сгенерировать PDF в .NET с помощью PuppeteerSharp и Handlebars
Этот пример показывает, как взять HTML-шаблон, подставить данные через Handlebars и преобразовать его в PDF с помощью PuppeteerSharp.
- Читаем HTML-шаблон InvoiceTemplate.html и компилируем его в функцию.
- Подставляем данные, получаем готовый HTML.
- PuppeteerSharp скачивает Chromium.
- Открываем браузер в headless-режиме, создаём страницу, загружаем туда HTML.
- Сохраняем страницу как PDF в формате A4, с фоном и нужными отступами.
Код:
Таким образом можно автоматизировать генерацию счётов, отчётов или любых документов из HTML прямо в C#.
Этот пример показывает, как взять 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#.