Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Mostrar más📈 Análisis del canal de Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET
El canal Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 21 565 suscriptores, ocupando la posición 6 133 en la categoría Tecnologías y Aplicaciones y el puesto 30 418 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 21 565 suscriptores.
Según los últimos datos del 25 octubre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -106, y en las últimas 24 horas de -7, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 13.86%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.24% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 2 989 visualizaciones. En el primer día suele acumular 1 562 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 4.
- Intereses temáticos: El contenido se centra en temas clave como .net, шарписта, навигация, await, string.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 26 octubre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
let sumWithOffset k xs =
List.fold
(fun total value -> total + value + k)
0
xs
Такие захваты могут требовать создания замыкания. В FSharp.Core из .NET 11 RC2 больше функций обхода List и Array умеют встраивать переданные лямбды, убирая часть этих выделений памяти.
В измерениях автора изменений для отдельных вызовов List.fold, List.exists, Array.fold и Array.fold2 с захватывающими лямбдами расход снизился с 24 байт до нуля по сравнению с FSharp.Core 9.0.100.
⏬ Ноль байт относится к конкретным измерениям
Это не обещание, что теперь любой fold или произвольная обработка коллекции ничего не выделяет. Влияют форма вызова, возможность встраивания и работа внутри самой функции.
Практический вывод: перед ручной заменой функционального кода на цикл проверьте горячий участок на новой версии. Часть расходов уже может убрать компилятор и библиотека.
.NET 11 пока в RC; измерения лучше повторить на своём сценарии.
🔗 Источник
#il_люминатор
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета. А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога. Акция действует до 31 октября включительно ⏳ ⏮️ Пора прокачать свой стек
<ChatPage Agent="_agent"
Placeholder="Что нужно сделать?" />
В основе — UIAgent, который работает с IChatClient и превращает поток обновлений ответа в наблюдаемые блоки содержимого. Компоненты могут отображать текст, вызовы инструментов и запросы подтверждения по мере их поступления.
Есть и более низкоуровневые части: MessageList, MessageInput и BlockRenderer. Из них можно собрать собственный интерфейс вместо готовой страницы.
⏬ Что остаётся приложению
Пакет экспериментальный; инструкция в статье использует .NET 11 RC1 и предварительную версию пакета. Разрешения на вызов инструментов, серверные проверки и обработку файлов или аудио приложение организует само.
Это заготовки интерфейса и состояния. Подключение красивого чата само по себе не даёт агенту безопасного доступа к вашим данным.
🔗 Источник
#async_news
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарпистаusing System.Windows.Forms;
using (container.SuspendPainting(
LayoutSuspendTraversal.TargetAndDescendants))
{
container.Font = newFont;
foreach (Control child in container.Controls)
{
child.Margin = new Padding(8);
}
}
Область приостанавливает перерисовку контейнера и перерасчёт разметки для него и потомков. При выходе из using всё возобновляется, даже если внутри возникло исключение.
⏬ У перегрузок разное поведение
Вызов SuspendPainting() без аргументов приостанавливает только перерисовку целевого элемента. Перерасчёт разметки он не останавливает.
TargetAndDescendants относится к обходу дерева для приостановки разметки: это не отдельная блокировка рисования каждого потомка.
Открывайте область до изменения свойств, которые запускают перерасчёт, и выполняйте обновление в UI-потоке. Код рассчитан на .NET 11, пока это RC.
🔗 Источник
#sharp_view
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарпистаdotnet nuget add source https://api.nuget.org/v3/index.json --name public --min-publish-age-hours 24 --configfile nuget.config
Команда записывает настройку minPublishAgeHours для источника в nuget.config. При выборе версии команды dotnet package add и dotnet package update учитывают этот срок.
Для уже добавленного источника:
dotnet nuget update source public --min-publish-age-hours 48 --configfile nuget.config
⏬ Это задержка, а не проверка безопасности
Пакет не становится безопасным автоматически через сутки. Настройка лишь даёт время обнаружить проблемы со свежим выпуском.
Не стоит считать её универсальным запретом на установку любой явно закреплённой свежей зависимости. А при восстановлении зависимостей с плавающими версиями отсутствие подходящей версии приводит к NU1020 — конфликт становится видимым.
🔗 Источник
#sharp_view
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью. 💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥 Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога. Акция действует до 31 октября включительно ⏳ ⏬ Собрать свой учебный билд
Animal animal = new Dog();
animal.Speak();
Если JIT видит конкретный тип объекта, он может вызвать метод Dog напрямую, а затем встроить его тело в вызывающий код. Это открывает дорогу другим оптимизациям: вычислению констант и удалению ненужных веток.
Для менее очевидных случаев есть динамический PGO. Среда собирает сведения о реальных типах и может создать быстрый путь для наиболее частого варианта. Проверка типа остаётся: если вместо Dog придёт Cat, выполнится корректный запасной путь.
⏬ Что меняется для разработчика
В разборе .NET 11 Стивен Тауб показывает новые оптимизации этих сценариев. Это повод измерить горячие участки на новой среде, а не переписать все интерфейсы ради скорости.
Сравнивать стоит Release-сборки через BenchmarkDotNet. Выигрыш отдельного микробенчмарка не равен ускорению всего приложения. .NET 11 пока находится на стадии RC.
🔗 Источник
#il_люминатор
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарпистаvar queue = Channel.CreateBounded<string>(
new BoundedChannelOptions(100)
{
FullMode = BoundedChannelFullMode.Wait
});
await queue.Writer.WriteAsync(job, cancellationToken);
Когда в очереди сто элементов, WriteAsync ждёт свободного места. TryWrite в той же ситуации сразу вернёт false. Так появляется backpressure: производитель видит, что потребитель не успевает.
⏬ Есть важное условие
Задания должен читать параллельно работающий потребитель. Если сначала заполнить очередь, а читать начать только после всех записей, код может застрять на заполнении.
Channel помогает координировать работу внутри процесса. Он не сохраняет задания после перезапуска и не заменяет надёжный внешний брокер сообщений.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewTask request = LoadAsync();
await request.WaitAsync(
TimeSpan.FromSeconds(3));
❤️ — LoadAsync автоматически остановится
👍 — ожидание завершится по таймауту, операция может продолжиться
🔥 — заблокируется текущий поток
Ответ:
👍 Если request не успеет завершиться, await выбросит TimeoutException. WaitAsync ограничивает ожидание, а не останавливает исходную операцию. Для её отмены нужен CancellationToken, переданный в LoadAsync, и поддержка отмены внутри этой операции.
Не стоит считать таймаут гарантией, что работа больше не выполняется. Для HTTP-запроса, записи в файл или внешнего задания это разные обещания: «я больше не жду» и «операция действительно остановлена».
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#dotnet_challengeusing var timer = new PeriodicTimer(
TimeSpan.FromSeconds(10));
while (await timer.WaitForNextTickAsync(stoppingToken))
{
await RefreshAsync(stoppingToken);
}
Пока RefreshAsync не закончится, следующая итерация этого цикла не начнётся. Но это не то же самое, что «десять секунд отдыха после каждой работы».
⏬ Что случится с пропущенными тиками?
Таймер объединяет несколько тиков, пришедших между ожиданиями, в один. Если обновление заняло 25 секунд, не появится очередь из всех пропущенных запусков. Следующее ожидание может завершиться сразу.
У таймера должен быть один потребитель. Отмена ожидания через токен приводит к OperationCanceledException — её нужно учитывать при остановке фонового сервиса.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминаторawait Parallel.ForEachAsync(
ids,
new ParallelOptions
{
MaxDegreeOfParallelism = 8,
CancellationToken = cancellationToken
},
async (id, token) =>
{
await LoadAsync(id, token);
});
Здесь одновременно выполняются не более восьми обработчиков. Токен отмены передаётся внутрь каждой итерации. Поддерживается и источник IAsyncEnumerable.
⏬ Восемь обработчиков — не восемь запросов в секунду
Это ограничение конкурентности, а не rate limit. Если API разрешает фиксированное число запросов за минуту, нужен отдельный механизм ограничения частоты. И не делите один DbContext между параллельными итерациями: каждый обработчик должен работать с подходящим ему контекстом.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewusing Riok.Mapperly.Abstractions;
[Mapper]
public partial class UserMapper
{
public partial UserDto ToDto(User source);
}
Сигнатуру пишете вы, реализацию добавляет source generator. Её можно посмотреть и проверить: какие свойства перенеслись, как обрабатывается null и где выполняется преобразование.
⏬ Зачем это полезно
Маппинг не требует reflection во время выполнения. А диагностика сборки может предупредить о свойстве, которое не удалось сопоставить.
При этом генератор не знает бизнес-смысл данных. Если имя поля поменялось или преобразование требует правила, это нужно описать явно. Автоматизировать присваивания можно; проверку контракта DTO всё равно стоит оставить себе.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_viewvar product = await cache.GetOrCreateAsync(
$"product:{id}",
async token => await repository.LoadAsync(id, token),
cancellationToken: cancellationToken);
Для регистрации нужен пакет Microsoft.Extensions.Caching.Hybrid и вызов builder.Services.AddHybridCache();. Без Redis тоже работают локальный кеш и защита от такого залпа.
⏬ Важная граница
Объединение запросов действует внутри одного экземпляра HybridCache. Два сервера могут одновременно обратиться к базе, даже если используют общий Redis. Это полезная защита локального кеша, но не распределённая блокировка на весь кластер.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминатор