ch
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

前往频道在 Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

显示更多

📈 Telegram 频道 Библиотека шарписта | C#, F#, .NET, ASP.NET 的分析概览

频道 Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 21 857 名订阅者,在 技术与应用 类别中位列第 6 197,并在 俄罗斯 地区排名第 30 823

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 21 857 名订阅者。

根据 12 六月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -48,过去 24 小时变化为 -2,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 12.66%。内容发布后 24 小时内通常能获得 7.50% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 2 769 次浏览,首日通常累积 1 640 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 9
  • 主题关注点: 内容集中在 .net, шарписта, навигация, await, string 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

凭借高频更新(最新数据采集于 13 六月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

21 857
订阅者
-224 小时
-257
-4830
帖子存档
🔥 Сегодня последний день скидки! На недавнем вебинаре «ИИ-агенты: новая фаза развития AI» мы показали, как агенты уже меняют
🔥 Сегодня последний день скидки! На недавнем вебинаре «ИИ-агенты: новая фаза развития AI» мы показали, как агенты уже меняют работу Data Scientists и инженеров. Что тебя ждёт на курсе: ⚡️ создашь своего ИИ-агента с нуля ⚡️ соберёшь RAG-систему ⚡️ научишься адаптировать LLM под реальные данные бизнеса ⏳ До конца этого дня цена на курс 57 000 ₽. Уже завтра будет 69 000 ₽. Успевай записаться (используй промокод datarascals). 🔗 Записаться на курс

👨‍💻 Каналы в .NET Когда в приложении нужно обрабатывать поток данных от продюсеров к потребителям, первым делом вспоминают про очереди или ConcurrentQueue. Но в асинхронном мире этого мало. Поэтому в .NET есть каналы. Канал устроен как пара из продюсера и потребителя. Когда продюсер пишет элемент в канал, он либо сразу уходит к потребителю, либо ждёт, если очередь переполнена. Потребитель, в свою очередь, может ждать новые элементы без блокировки потоков — всё работает на async/await. Главная сила каналов — балансировка нагрузки. Ограниченные каналы позволяют держать под контролем количество элементов. Это защищает приложение от перегрузки: если продюсер работает быстрее, чем потребитель, система сама притормозит поток данных. Неограниченные каналы — вариант попроще, они всегда принимают новые элементы, но это может обернуться непредсказуемым ростом памяти. Мини-пример:
var channel = Channel.CreateBounded<int>(5);

// producer
_ = Task.Run(async () =>
{
    for (int i = 0; i < 10; i++)
    {
        await channel.Writer.WriteAsync(i);
        Console.WriteLine($"Produced {i}");
    }
    channel.Writer.Complete();
});

// consumer
await foreach (var item in channel.Reader.ReadAllAsync())
{
    Console.WriteLine($"Consumed {item}");
}
Почему это лучше, чем ConcurrentQueue? Потому что Channel создан сразу с учётом асинхронности. Вам не нужно городить блокировки и таймеры ожидания — достаточно написать await reader.ReadAsync(), и код будет сам по себе масштабироваться без блокировки потоков. 🐸Библиотека шарписта #sharp_view

❓ Что выведет код Пишите свои ответы в комментариях 👇 Для любознательных ответ такой: 333 #dotnet_challenge
Что выведет код Пишите свои ответы в комментариях 👇 Для любознательных ответ такой: 333 #dotnet_challenge

🤫 Курс «ИИ-агенты для DS-специалистов» Каждый технологический скачок оставляет позади тех, кто «подождал ещё чуть-чуть». ИИ-
🤫 Курс «ИИ-агенты для DS-специалистов» Каждый технологический скачок оставляет позади тех, кто «подождал ещё чуть-чуть». ИИ-агенты — это новый рывок. Уже через пару лет именно они будут драйвить аналитику и автоматизацию. Хотите остаться на гребне? 🖥️ На курсе «ИИ-агенты для DS-специалистов» мы разберём: — создание AI-агентов с нуля — сборку собственной RAG-системы — интеграцию LLM под задачи бизнеса 📌 Курс подходит: → ML/AI инженерам (middle+ / senior) → Data Scientists → Backend и platform-инженерам → Advanced CS/DS студентам ⚡️ Старт уже скоро — 3 октября. 💰 До 28 сентября действует скидка — 57.000 ₽ вместо 69.000 ₽ (по промокоду datarascals). 🔗 Узнать больше о курсе и записаться З.ы. если вы не успели на вебинар «ИИ-агенты: новая фаза развития искусственного интеллекта» — запись уже доступна

🔄 Апдейт .NET Aspire Microsoft представила .NET Aspire 9.5 — свежий релиз для разработки распределённых приложений. Главное
🔄 Апдейт .NET Aspire Microsoft представила .NET Aspire 9.5 — свежий релиз для разработки распределённых приложений. Главное новшество — file-based AppHost: теперь можно описать всё приложение в одном файле apphost.cs, без громоздких .csproj. Добавление ресурсов и сервисов делается буквально одной строкой. Ещё появились улучшения в CLI, новая команда aspire update, упрощающая апгрейд SDK и интеграций, а также обновлённый дэшборд. ➡️ Блог разработчиков 🐸Библиотека шарписта #async_news

⏱️ Как ускорить асинхронный код в C# Частая ошибка — писать асинхронные вызовы последовательно: await GetUser(); await GetOrd
⏱️ Как ускорить асинхронный код в C# Частая ошибка — писать асинхронные вызовы последовательно:
await GetUser();
await GetOrders();
await GetRecommendations();
Каждая операция ждёт предыдущую и если каждый запрос занимает по секунде, общее время = 3 секунды. А можно иначе:
var userTask = GetUser();
var ordersTask = GetOrders();
var recsTask = GetRecommendations();

await Task.WhenAll(userTask, ordersTask, recsTask);
Все задачи стартуют сразу. Теперь общее время = 1 секунда (ожидание самой длинной операции). Маленький приём — большая разница во времени выполнения. 🐸Библиотека шарписта #sharp_view

❔ Отдохнуть или покушать Давайте помечтаем — ваш работодатель даёт вам выбор: 1 sick-day (отгул с сохранением ЗП) или оплата
Отдохнуть или покушать Давайте помечтаем — ваш работодатель даёт вам выбор: 1 sick-day (отгул с сохранением ЗП) или оплата одного обеда в неделю. 💬 Что вы выберете? Почему? Ждём в комментариях 👇 🐸Библиотека шарписта #entry_point

💡 Domain Validation в .NET и DDD — просто о сложном В .NET-проектах часто пишут валидацию прямо в контроллере или сервисе: — проверили, что поле не пустое, — число больше нуля, — email подходит по формату. Это правильно, но есть проблема — бизнес-правила остаются размазаны по коду. В итоге можно случайно создать объект в некорректном состоянии (например, заказ без товаров). В идеале должно быть два уровня валидации Application Validation И Domain Validation. В одном проверяются входные данные, а в другом строится защита сущностей от нарушения бизнес-правил. Пример проверки на уровне приложения:
public record CreateOrderDto(string CustomerEmail, List<OrderItemDto> Items);

public class OrderApplicationValidator
{
    public static void Validate(CreateOrderDto dto)
    {
        if (string.IsNullOrWhiteSpace(dto.CustomerEmail))
            throw new ArgumentException("Email is required");

        if (!dto.CustomerEmail.Contains("@"))
            throw new ArgumentException("Email format is invalid");

        if (dto.Items == null || dto.Items.Count == 0)
            throw new ArgumentException("Order must contain at least one item");
    }
}
Здесь мы проверяем только корректность ввода. А вот внутри домена мы защищаем бизнес-правила:
public class OrderItem
{
    public string ProductName { get; }
    public int Quantity { get; }
    public Money Price { get; }

    private OrderItem(string productName, int quantity, Money price)
    {
        ProductName = productName;
        Quantity = quantity;
        Price = price;
    }

    public static OrderItem Create(string productName, int quantity, Money price)
    {
        if (string.IsNullOrWhiteSpace(productName))
            throw new InvalidOperationException("Product name cannot be empty");

        if (quantity <= 0)
            throw new InvalidOperationException("Quantity must be greater than zero");

        return new OrderItem(productName, quantity, price);
    }

    public Money GetTotal() => Money.Create(Quantity * Price.Amount);
}
Когда правила закреплены в домене, они становятся частью самой логики, а не зависимыми от внешних слоёв. Это гарантирует, что объект в принципе невозможно построить в некорректном виде. 🐸Библиотека шарписта #il_люминатор

Стань участником МТС True Tech Champ 2025 — масштабного ИТ-чемпионата по программированию с призовым фондом 10 250 000 рублей
Стань участником МТС True Tech Champ 2025 — масштабного ИТ-чемпионата по программированию с призовым фондом 10 250 000 рублей. Соревнования пройдут в двух треках: 1. Алгоритмические задачи Покажи индивидуальное мастерство в работе со структурами данных и написании алгоритмов. Чтобы успешно справиться с заданиями, пригодится опыт решения олимпиад. 2. Программирование роботов Оживи робота с помощью кода, чтобы он прошел лабиринт быстрее всех. Трек будет интересен разработчикам: С++, Go, Python, JS, Java, C# и не только. Участвовать могут школьники, студенты, начинающие ИТ-специалисты и опытные разработчики. Отборочные этапы пройдут онлайн, шоу-финал — 21 ноября в МТС Live Холл в Москве. Ты можешь выйти на арену как участник или наблюдать за чемпионатом как зритель. Регистрируйся до 20 октября по ссылке.

🔢 Когда числа становятся понятными UnitsNet — .NET-библиотека, которая превращает «голые» числа в осмысленные физические вел
🔢 Когда числа становятся понятными UnitsNet — .NET-библиотека, которая превращает «голые» числа в осмысленные физические величины. Пример: вместо double speed = 27.8; вы пишете Speed speed = Speed.FromMetersPerSecond(27.8); и работаете уже с километрами в час, милями или узлами — без ручных пересчётов. В UnitsNet поддерживается более сотни единиц измерения — от времени и массы до температуры и силы. Вам не нужно держать в голове коэффициенты и вручную пересчитывать из одной системы в другую: библиотека сделает это сама. Ещё один плюс — читаемость кода. Ваши расчёты выглядят как документация: сразу видно, где давление, где скорость, а где длина. ➡️ Попробовать либу 🐸Библиотека шарписта #sharp_view

❗ Сегодня премьера В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным — «ИИ-агенты: новая фаза развития искусствен
❗ Сегодня премьера В 19:00 МСК стартует бесплатный вебинар с Максимом Шаланкиным«ИИ-агенты: новая фаза развития искусственного интеллекта». В программе: — почему агенты ≠ чат-боты; — живое демо простого агента; — и как эта тема встроена в курс, который разработан под руководством Никиты Зелинского. Это прямой эфир: подключиться можно через лендинг курса.

📎 Где заказать курсовую по программированию Курсовые по программированию сегодня можно заказать в пару кликов — рынок перепо
📎 Где заказать курсовую по программированию Курсовые по программированию сегодня можно заказать в пару кликов — рынок переполнен сервисами, готовыми взять на себя любую задачу. За простотой скрываются и подводные камни: сомнительное качество, завышенные цены и риск нарваться на недобросовестных исполнителей. По ссылке топ площадок, которые зарекомендовали себя в 2025 году. ➡️ Узнать, где лучше 🐸Библиотека шарписта

🤩 Live Preview без дебага В Visual Studio 2022 v17.14 появилась функция для .NET MAUI — XAML Live Preview теперь доступен пр
🤩 Live Preview без дебага В Visual Studio 2022 v17.14 появилась функция для .NET MAUI — XAML Live Preview теперь доступен прямо во время дизайна, без запуска отладки. Изменения сразу видны, можно пользоваться Hot Reload и инструментами инспекции. Поддержка работает не только для Windows, но и для Android-эмуляторов, а вместе с GitHub Copilot Vision можно прикрепить картинку макета и получить готовый XAML-код, который отобразится в Live Preview. 🔗 Подробнее 🐸Библиотека шарписта #async_news

⚙️ Почему async void ломает ваш код В C# у async void есть дурная репутация, и не зря. Такой метод не возвращает Task, а значит, его нельзя await-ить, нельзя встроить в пайплайн и невозможно корректно отследить завершение. Исключения из него не ловятся обычным образом — они пробиваются в синхронизационный контекст или в пул потоков, где легко превращаются в необработанные и могут уронить процесс.
// Контроллер ASP.NET Core
[HttpPost]
public async void Create() { await _svc.DoAsync(); } // Исключения мимо pipeline

// Библиотека
public async void SaveAsync(Item item) { await _repo.Save(item); } // Вызывающему не сконтролировать
Правильно — всегда возвращать Task:
[HttpPost]
public async Task<IActionResult> Create() { await _svc.DoAsync(); return Ok(); }

public Task Invoke(HttpContext ctx) => _next(ctx);

public Task SaveAsync(Item item) => _repo.Save(item);
Единственный сценарий, где async void уместен, — обработчики событий в UI-фреймворках вроде WPF или WinForms, где сигнатура задаётся самим фреймворком. Там приходится мириться, но даже там стоит ловить исключения локально и логировать их. 🐸Библиотека шарписта #sharp_view

💡 Что скрывается под капотом IReadOnlyList В .NET есть интерфейс IReadOnlyList<T>. На первый взгляд, он обещает нам неизменяемый список. Но это полуправда. Определение интерфейса:
public interface IReadOnlyList<out T> : IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable
{
    T this[int index] { get; }
}
Интерфейс наследует IReadOnlyCollection, а тот, в свою очередь, наследует IEnumerable. Таким образом, он даёт доступ: к элементам через индекс (this[int index]), к свойству Count, и к итерации через foreach. ⚠️ Важный нюанс: IReadOnlyList не делает коллекцию реально readonly. Если у вас есть List<int> и вы приведёте его к IReadOnlyList<int>, изменять список по-прежнему можно — просто не через эту ссылку. Пример:
var list = new List<int> { 1, 2, 3 };
IReadOnlyList<int> ro = list;

list.Add(4);  // ro теперь "видит" 4
То есть IReadOnlyList — это контракт для чтения, а не гарантия неизменности. Если нужна настоящая защита — используйте ImmutableArray или ReadOnlyCollection. 🐸Библиотека шарписта #il_люминатор

🔥 Не пропустите событие осени для AI-комьюнити 24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты:
🔥 Не пропустите событие осени для AI-комьюнити 24 сентября, 19:00 Мск — бесплатный вебинар с Максимом Шаланкиным «ИИ-агенты: новая фаза развития искусственного интеллекта» 😤 Пока все спорят, «боты это или нет», мы покажем, как работают настоящие агенты: с планированием, инструментами и памятью. За час Максим разберёт: — почему ИИ-агенты сейчас на пике инвестиций — чем они отличаются от ChatGPT и обычных моделей — цикл агента: восприятие → планирование → действие → обучение — живое демо простого агента — как бизнес уже получает ROI до 80% ⚡️ Хотите спросить у Максима всё, что обычно остаётся «за кадром»? Ловите шанс — только в прямом эфире.Мест мало, регистрация закроется, как только забьём комнату

⚙️ Когда Hash Join быстрее Nested Loops Внутри SQL-движка соединение таблиц — это не магия, а конкретный алгоритм. Сравним два подхода к соединению таблиц. Nested Loops работает буквально так, как звучит: берём строку из первой таблицы и ищем совпадения во второй. Если вторая таблица имеет подходящий индекс, поиск по нему будет очень быстрым, и такой алгоритм блестяще справляется с задачей маленькое соединяется с большим. Hash Join подходит там, где Nested Loops захлёбывается. Он сначала строит хэш-таблицу по одной из входных таблиц, а затем пробегается по второй и ищет совпадения через хэш-функцию. Это даёт огромный выигрыш, когда нужно соединить два больших набора данных, и когда индексов для ускорения поиска нет. Цена такого подхода — расход памяти. В итоге — если речь идёт о маленьком наборе строк против большого и есть индекс, Nested Loops окажется быстрее. Но если обе таблицы крупные и индексы не спасают, Hash Join чаще всего становится оптимальным выбором. 💬 Как вы бы ответили на такой вопрос на собеседовании? 🐸Библиотека шарписта #dotnet_challenge