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

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

Open in Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Show more

📈 Analytical overview of Telegram channel Библиотека шарписта | C#, F#, .NET, ASP.NET

Channel Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) in the Russian language segment is an active participant. Currently, the community unites 21 701 subscribers, ranking 5 943 in the Technologies & Applications category and 30 267 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 21 701 subscribers.

According to the latest data from 29 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -48 over the last 30 days and by -6 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 16.72%. Within the first 24 hours after publication, content typically collects 7.84% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 3 628 views. Within the first day, a publication typically gains 1 702 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 23.
  • Thematic interests: Content is focused on key topics such as .net, шарписта, навигация, await, string.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Thanks to the high frequency of updates (latest data received on 30 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

21 701
Subscribers
-624 hours
-57 days
-4830 days
Posts Archive
🎁 И мозг прокачать, и макбук утащить! Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻 Условия: 1️⃣ П
🎁 И мозг прокачать, и макбук утащить! Proglib.academy разыгрывает MacBook Pro 14 (M3 Pro, 36 GB, 1 TB SSD) 💻 Условия: 1️⃣ Покупаешь любой курс Proglib до 15 ноября. 2️⃣ Проходишь минимум 2 учебные недели (можно осилить за два вечера). 3️⃣ Пишешь куратору в чат своего курса: #розыгрыш. Что за курсы?Математика для Data Science (6 месяцев боли и просветления). — Основы Python, ML, алгоритмы, AI-агенты и даже курс для тех, кто в IT, но не кодит. 👉 Участвовать в розыгрыше

💬 Всё, что вам нужно знать о главном событии года для .NET разработчиков Через неделю начинается самая важная конференция дл
💬 Всё, что вам нужно знать о главном событии года для .NET разработчиков Через неделю начинается самая важная конференция для .NET сообщества — .NET Conf 2025. С 11 по 13 ноября пройдёт трёхдневная бесплатная виртуальная конференция, где будет официально представлена .NET 10 и показаны новые возможности Visual Studio 2026. Самые интересные сессии первого дня: • C# 14: Новые языковые фичи — улучшенная ясность кода и новые паттерны программирования • Производительность .NET 10 — оптимизации во всей платформе и компиляторе Blazor в .NET 10 — WebAuthN, passkeys, улучшенная диагностика и производительность • Aspire: облачная разработка — опinionated фреймворк для observable, production-ready распределённых приложений • Agentic Development — как строить AI-агентов, которые могут рассуждать, планировать и действовать • .NET MAUI обновления — новые компоненты, производительность, улучшенный tooling Второй день: • Облачная разработка с Azure — контейнеры, K8s, функции и AI-сервисы • Remote MCP servers — как строить собственные интеграции • Redis интеграция с .NET • Расширение и кастомизация Aspire — custom integrations и расширенный функционал • Microsoft.Testing.Platform — новый фреймворк тестирования ➡️ Анонс от Microsoft 🐸Библиотека шарписта #async_news

🤩 Lorem ipsum, который имитирует научный вздор Представьте: нужно заполнить макет контентом, чтобы дизайнер видел, как всё в
🤩 Lorem ipsum, который имитирует научный вздор Представьте: нужно заполнить макет контентом, чтобы дизайнер видел, как всё выглядит. Берёте Lorem ipsum. Но он выглядит как набор слов. А если нужен текст, который с первого взгляда кажется серьезным, но при внимательном чтении — полная чушь? Вот для этого WaffleGenerator. Это библиотека, которая генерирует абзацы в стиле научно-популярного бреда. Текст выглядит настоящим: правильная структура, логичные переходы, официальный тон. Но если вы прочитаете внимательно, поймёте, что там просто красивые слова без смысла. Как применить Просто:
var text = WaffleEngine.Html(paragraphs: 2, includeHeading: true);
var text = WaffleEngine.Text(paragraphs: 1, includeHeading: true);
var markdown = WaffleEngine.Markdown(paragraphs: 1, includeHeading: true);
Поддерживает три формата: HTML, обычный текст и Markdown. ➡️ Попробовать либу 🐸Библиотека шарписта #sharp_view

⭐️ Microsoft обновила дорожную карту в Visual Studio на ноябрь Компания работает над несколькими направлениями, которые должн
⭐️ Microsoft обновила дорожную карту в Visual Studio на ноябрь Компания работает над несколькими направлениями, которые должны сделать IDE более интегрированной с AI. Новые агенты для обработки сложных workflow, улучшения в режиме Agent Mode и Chat, а также поддержка работы нескольких агентов одновременно. По части моделей Microsoft планирует добавить автоматический выбор модели в Chat, GPT-5 Codex, улучшить UX для устаревающих моделей и поддержку разных системных промптов для каждой модели. Microsoft ставит цель сделать Copilot доступным на каждом этапе разработки — не только для написания кода, но и для поиска, исправления ошибок, написания тестов, коммитов. ➡️ Блог разработчиков 🐸Библиотека шарписта #async_news

📎 Как считать повторения без условных операторов Нужно посчитать, сколько раз каждое значение встречается в данных. Логично напрашивается проверка:
if (counts.ContainsKey(key))
    counts[key]++;
else
    counts[key] = 1;
Но есть способ проще:
counts[key] = counts.GetValueOrDefault(key) + 1;
Метод GetValueOrDefault возвращает значение, если ключ есть, или значение по умолчанию (для int это 0). Затем добавляем единицу. Никаких условных операторов, одна строка. Если можете — используйте LINQ:
var counts = items.GroupBy(x => x.Key)
    .ToDictionary(g => g.Key, g => g.Count());
Это явно показывает намерение: группируем по ключу, считаем количество в каждой группе. Но если вы наполняете словарь в цикле или обрабатываете поток данных, GetValueOrDefault — идеальный выбор. 🐸Библиотека шарписта #sharp_view

👨‍💻 Demystifier: когда стек-трейс не радует Откройте логи ошибки из продакшена. Видите стек-трейс? Он полон <>c__Disp
👨‍💻 Demystifier: когда стек-трейс не радует Откройте логи ошибки из продакшена. Видите стек-трейс? Он полон <>c__DisplayClass2_0, d__5``1.MoveNext() и прочих артефактов, которые сгенерировал компилятор. Это не ошибка — это просто то, как .NET преобразует современный C# в IL. Но это делает поиск проблемы медленнее, чем нужно. Demystifier восстанавливает оригинальный вид кода: • Вместо ValueTuple``2 param показывает (string val, bool) param • Вместо Func``1 показывает Func<string>async методы помечает как async Task<string> • Локальные функции и лямбды показывает с контекстом Как применить Вызовите exception.Demystify() и передайте результат:
try { /* ваш код */ }
catch (Exception ex)
{
    logger.LogError(ex.Demystify(), "Ошибка");
}
Анализ стека стоит ресурсов. На высоконагруженной системе вызывать Demystify для каждого исключения неэкономно. Используйте его выборочно — для критических путей, для отладки в development окружении или для редких, но важных ошибок. ➡️ Репозиторий либы 🐸Библиотека шарписта #sharp_view

📎 Когда тип спасает Представьте, что вы пришли в магазин и продавец говорит: «Вот вам что-то. Не знаю что. Может быть, помидоры, может быть, кирпич, может быть, счастье. Узнаете, когда вернётесь домой». Вот такое же ощущение от IActionResult без типов. Проблема с IActionResult:
[HttpGet("{id:guid}")]
public async Task<IActionResult> GetById(Guid id, ISender mediator, CancellationToken ct)
{
    var dto = await mediator.Send(new GetUserQuery(id), ct);
    return dto is null ? NotFound() : Ok(dto);
}
Возвращаемый тип — IActionResult. Просто интерфейс. Ничего конкретного. Кто читает этот код, не знает, что именно вернётся. Может быть UserDto, может быть ошибка, может быть что угодно. Вот так выглядит сгенерированная Swagger документация:
{
  "responses": {
    "200": { "description": "Success" }
  }
}
Никакой информации о схеме. Кто использует ваш API, не знает, какие поля будут в ответе. IDE не может подсказать структуру. Тесты пишутся вслепую. Решение: ActionResult<T>
[HttpGet("{id:guid}")]
public async Task<ActionResult<UserDto>> GetById(Guid id, ISender mediator, CancellationToken ct)
{
    var dto = await mediator.Send(new GetUserQuery(id), ct);
    return dto is null ? NotFound() : Ok(dto);
}
Возвращаемый тип — ActionResult<UserDto>. Конкретно и ясно. Читающий код понимает мгновенно: метод возвращает UserDto при успехе или ошибку. Swagger генератор видит типы и строит правильную документацию. IActionResult можно использовать, когда метод не возвращает тело, к примеру ответ 204. 🐸Библиотека шарписта #sharp_view

Гид по Redis в C# ASP.NET: ускоряем приложения и снижаем нагрузку на базу данных. Redis — быстрая база данных в памяти, котор
Гид по Redis в C# ASP.NET: ускоряем приложения и снижаем нагрузку на базу данных. Redis — быстрая база данных в памяти, которая помогает масштабировать системы и ускорять доступ к данным. На открытом вебинаре курса OTUS C# ASP.NET Core разработчик Андрей Сорокин покажет, как интегрировать Redis в ASP.NET Core 8 и внедрить кэширование в реальных проектах. 📌 12 ноября, 20:00 Гид по Redis в C# ASP.NET — настройка Redis в Docker — кэширование ответов API — хранение данных для быстрого доступа — ускорение обработки запросов и снижение нагрузки на БД Вебинар бесплатный и будет полезен C#-разработчикам, архитекторам и тимлидам, которые хотят повысить производительность приложений и упростить масштабирование. 👉 Регистрируйтесь: https://clc.to/YMHL9A Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

🤨 Когда помощник становится врагом Представьте, что вы отправили друга в магазин с деньгами на общий счёт. Он может потратит
🤨 Когда помощник становится врагом Представьте, что вы отправили друга в магазин с деньгами на общий счёт. Он может потратить их на что угодно, при этом никому не отчитываясь. Вот примерно так же работает static с изменяемым состоянием. Удобно? Да. Безопасно? Совсем нет. Почему static плохо сочетается с данными Static — это ключевое слово, которое любят новички и используют для удобства. А потом из этого вырастают проблемы, которые отъедают часы отладки. Главная беда в том, что статические поля существуют всё время работы программы и доступны отовсюду. Четыре золотых правила 1. Статические поля могут быть только для чтения. Лучше — константы. 2. Статические методы должны работать как математические функции: дали параметры — получили результат. Никаких побочных эффектов, никаких изменений состояния. Например: Select, Where, First из LINQ — это всё статические методы расширения, которые не трогают исходную последовательность. 3. Если в классе есть методы, которые не используют поля экземпляра, эту логику лучше вынести в отдельный статический класс-помощник. Это делает код чище, тесты проще. 4. Если вы создаёте статическое поле, пусть оно указывает на что-то, что не меняется. На объект конфигурации? Хорошо. На список данных, который вы потом модифицируете? Катастрофа. Когда static — ваш друг • Вспомогательные классы с чистыми функциями Создайте статический класс StringUtils с методом static string ToPascalCase(string input). Нет состояния, нет побочных эффектов, нет проблем. Это хорошее использование. • Методы расширения для преобразований Select, Where и компания — статические методы расширения, которые берут данные, преобразуют их и возвращают новые. Функциональный подход, никакого волшебства. • ThreadStatic для действительно отдельного состояния Если каждому потоку нужно своё состояние, можно использовать ThreadStatic. Но даже здесь нужна осторожность — каждый поток всё равно должен управлять своим состоянием. Передайте зависимость через конструктор, используйте DI-контейнер, создайте объект на сессию. Ваш будущий я, сидящий в отладчике в три утра, скажет вам спасибо. 🐸Библиотека шарписта #il_люминатор

⚡️ Пять команд .NET, без которых неудобно Бывает, нужно быстро собрать, запустить или опубликовать проект без запуска тяжелой
⚡️ Пять команд .NET, без которых неудобно Бывает, нужно быстро собрать, запустить или опубликовать проект без запуска тяжелой IDE, особенно в пайплайне или на сервере разработчика. Для этого хватает нескольких команд из .NET CLI, которые работают одинаково на всех платформах. Проверить установку и окружение поможет команда dotnet --info, она покажет версии SDK и рантаймов и архитектуру хоста. Сборка проекта выполняется командой dotnet build, по умолчанию в конфигурации Debug и с выводом артефактов в bin, причем команда учитывает инкрементальные изменения для скорости. Запуск приложения через dotnet run объединяет сборку и старт процесса, что эквивалентно кнопке Run в IDE и удобно для ручных проверок локально. Горячая перезагрузка из терминала через dotnet watch отслеживает изменения файлов и повторно запускает приложение с Hot Reload без ручного рестарта, что ускоряет цикл правка и проверка. Если сборка ведет себя странно, стоит выполнить dotnet clean, чтобы удалить выходные артефакты и заставить следующий build собрать все заново. Для развертывания используйте dotnet publish, который соберет релиз и положит готовый к деплою набор файлов в папку publish, включая веб приложения и сервисы. 🐸Библиотека шарписта #sharp_view

💬 Три дня работы Завтра начнётся самая короткая рабочая неделя ноября. Это буквально понедельник, среда и пятница. После шес
💬 Три дня работы Завтра начнётся самая короткая рабочая неделя ноября. Это буквально понедельник, среда и пятница. После шестидневки самое то. 💬 Что будете делать? Успевать выполнить недельные обязанности за три дня? Или три дня будете пытаться начать работать? 🐸Библиотека шарписта #entry_point

👀 Управление доступом в .NET Если вы работаете с авторизацией в .NET и используете Identity, но всё ещё не совсем понимаете,
👀 Управление доступом в .NET Если вы работаете с авторизацией в .NET и используете Identity, но всё ещё не совсем понимаете, как правильно организовать систему разрешений — есть видео, которое стоит посмотреть. В нём конкретный пример: как взять стандартный ASP.NET Core Identity и использовать его для управления доступом. Ничего экзотического — обычная setup с JWT и кастомным authorization handler. ➡️ Посмотреть видео 🐸Библиотека шарписта #sharp_view

✏️ Задачка с собеса Дано целое число, нужно проверить, является ли оно полным квадратом. Первый рефлекс новичка — взять квадр
✏️ Задачка с собеса Дано целое число, нужно проверить, является ли оно полным квадратом. Первый рефлекс новичка — взять квадратный корень и проверить, целое ли число:
(int)Math.Sqrt(num) * (int)Math.Sqrt(num) == num
Но на собесе после этого последует вопрос: «А можете без встроенной функции?» Вот тогда начинается интересное. Вместо математики используем логику: если x * x = num, то x находится где-то между 1 и num. Сужаем диапазон поиска, пока не найдём точный ответ.
public bool IsPerfectSquare(int num)
{
    long left = 1;
    long right = num;
    
    while (left <= right)
    {
        long mid = (left + right) / 2;
        long square = mid * mid;
        
        if (square == num)
            return true;
        else if (square < num)
            left = mid + 1;
        else
            right = mid - 1;
    }
    
    return false;
}
Есть ещё метод Ньютона для поиска корня — он даже быстрее для больших чисел:
public bool IsPerfectSquare(int num)
{
    long x = num;
    
    while (x * x > num)
    {
        x = (x + num / x) / 2;
    }
    
    return x * x == num;
}
Главное: объясните почему вы выбрали именно этот подход, а не просто скопировали решение. На собесе вас оценивают не только по скорости, а по способности мыслить. ➡️ Попробовать решить 🐸Библиотека шарписта #dotnet_challenge

👨‍💻 Worker Services и Channels вместо сторонних библиотек Каждый разработчик сталкивался с необходимостью выполнять долгие операции в фоне: отправка писем, обработка платежей, генерация отчётов, синхронизация данных. Обычно первая мысль — взять Hangfire, Quartz или Azure Functions. Но .NET 9 предоставляет встроенные примитивы, которые отлично справляются с этой задачей самостоятельно. Традиционные подходы — блокирующая коллекция и самописные очереди имеют недостатки: требуют ручной синхронизации, рискуют блокировкой потоков, не имеют встроенной поддержки обратного давления. Реализуем очередь задач с помощью каналов и фоновые сервисы Интерфейс и реализация очереди:
public interface IBackgroundTaskQueue
{
    ValueTask QueueAsync(Func<CancellationToken, Task> workItem);
    ValueTask<Func<CancellationToken, Task>> DequeueAsync(CancellationToken cancellationToken);
}

public class BackgroundTaskQueue : IBackgroundTaskQueue
{
    private readonly Channel<Func<CancellationToken, Task>> _queue;

    public BackgroundTaskQueue(int capacity = 100)
    {
        var options = new BoundedChannelOptions(capacity)
        {
            SingleReader = false,
            SingleWriter = false,
            FullMode = BoundedChannelFullMode.Wait
        };
        _queue = Channel.CreateBounded<Func<CancellationToken, Task>>(options);
    }

    public async ValueTask QueueAsync(Func<CancellationToken, Task> workItem)
        => await _queue.Writer.WriteAsync(workItem);

    public async ValueTask<Func<CancellationToken, Task>> DequeueAsync(CancellationToken cancellationToken)
        => await _queue.Reader.ReadAsync(cancellationToken);
}
Фоновые сервисы для обработки:
public class BackgroundWorker : BackgroundService
{
    private readonly IBackgroundTaskQueue _taskQueue;
    private readonly ILogger<BackgroundWorker> _logger;

    public BackgroundWorker(IBackgroundTaskQueue taskQueue, ILogger<BackgroundWorker> logger)
    {
        _taskQueue = taskQueue;
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Фоновый worker запущен");
        
        while (!stoppingToken.IsCancellationRequested)
        {
            var workItem = await _taskQueue.DequeueAsync(stoppingToken);
            try
            {
                await workItem(stoppingToken);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Ошибка при выполнении задачи");
            }
        }
        
        _logger.LogInformation("Worker останавливается...");
    }
}
Использование в контроллере:
app.MapPost("/send-email", async (IBackgroundTaskQueue queue) =>
{
    await queue.QueueAsync(async token =>
    {
        await Task.Delay(1000, token); // имитация отправки
        Console.WriteLine($"Email отправлен в {DateTime.UtcNow}");
    });
    return Results.Accepted();
});
Запрос возвращается немедленно, а работа продолжается в фоне. Queue автоматически буферизирует задачи, управляет нагрузкой и применяет обратное давление, если очередь переполнится. Когда использовать этот подход Подходит: • Внутренняя обработка задач в приложении • Нет нужды в UI-панели мониторинга • Self-contained сервисы Возьмите библиотеку, если: • Нужна распределённая обработка • Требуется веб-интерфейс для управления • Задачи должны пережить перезагрузку приложения ➡️ Источник 🐸 Библиотека шарписта #sharp_view

❓ Какой пост особенно зашел за эту неделю
Anonymous voting

📰 Шестидневные новости Вспомним, что произошло за 6 рабочих дней. — C# сохраняет популярность Вышел ежегодный Octoverse от G
📰 Шестидневные новости Вспомним, что произошло за 6 рабочих дней. — C# сохраняет популярность Вышел ежегодный Octoverse от GitHub, в котором отмечается рекордный рост числа разработчиков, активность в проектах с AI и смена лидерства по языкам программирования. — Unity Lite. Простой старт в 3D для всех Инструмент от Unity для создания интерактивных 3D-сцен без программирования, с удобной навигацией и редактором внутри браузера/. — Нейросети поиграли в покер Победителем стала модель OpenAI o3 с выигрышем в $36,691 виртуальных денег. Второе место занял Claude Sonnet 4.5, а третье — Grok 4 — Новые кастомные агенты Copilot для .NET GitHub запускает интеллектуальных помощников для оптимизации рабочего процесса .NET‑разработчиков. — Звуки флоппи-дисководов в эмуляторе 🐸 Библиотека шарписта #async_news

☺️ 6 дней труда — пора отдыхать Шестидневная рабочая неделя подошла к концу, и наконец-то время расслабиться. Используйте сво
☺️ 6 дней труда — пора отдыхать Шестидневная рабочая неделя подошла к концу, и наконец-то время расслабиться. Используйте свободное время для восстановления и новых впечатлений. 💬 А вы как планируете провести ближайшие дни? Уже отдыхаете или еще у дел? Ждем ваши ответы в комментариях 👇 🐸 Библиотека шарписта #entry_point

💲 Как договориться о зарплате: 9 стратегий В зарплатных переговорах нет универсального сценария. Но есть проверенные стратег
💲 Как договориться о зарплате: 9 стратегий В зарплатных переговорах нет универсального сценария. Но есть проверенные стратегии под разные ситуации. В статье 9 тактик от открытой до «я никуда не тороплюсь» — с готовыми фразами для собеседования. ➡️ Выбирайте свою в зависимости от опыта, позиции и типа компании 🐸 Библиотека шарписта