Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
显示更多📈 Telegram 频道 Библиотека шарписта | C#, F#, .NET, ASP.NET 的分析概览
频道 Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 21 701 名订阅者,在 技术与应用 类别中位列第 5 932,并在 俄罗斯 地区排名第 30 116 位。
📊 受众指标与增长动态
自 невідомо 创建以来,项目保持高速增长,吸引了 21 701 名订阅者。
根据 14 九月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -21,过去 24 小时变化为 3,整体触达仍然可观。
- 认证状态: 未认证
- 互动率 (ER): 平均受众互动率为 18.75%。内容发布后 24 小时内通常能获得 8.20% 的反应,占订阅者总量。
- 帖子覆盖: 每篇帖子平均可获得 4 069 次浏览,首日通常累积 1 779 次浏览。
- 互动与反馈: 受众积极参与,单帖平均反应数为 16。
- 主题关注点: 内容集中在 .net, шарписта, навигация, await, string 等核心主题上。
📝 描述与内容策略
作者将该频道定位为表达主观观点的平台:
“Все самое полезное для C#-разработчика в одном канале.
Наши курсы: https://clc.to/y3LDtw
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead”
凭借高频更新(最新数据采集于 15 九月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。
数据加载中...
| 日期 | 订阅者增长 | 提及 | 频道 | |
| 15 九月 | +6 | |||
| 14 九月 | +6 | |||
| 13 九月 | +5 | |||
| 12 九月 | 0 | |||
| 11 九月 | +5 | |||
| 10 九月 | +10 | |||
| 09 九月 | +8 | |||
| 08 九月 | +8 | |||
| 07 九月 | +4 | |||
| 06 九月 | +4 | |||
| 05 九月 | +1 | |||
| 04 九月 | +3 | |||
| 03 九月 | +2 | |||
| 02 九月 | +7 | |||
| 01 九月 | +5 |
var task = GetDataAsync();
// забыли await
Use(task);
Это режим «запустил и забыл» (fire-and-forget). Последствия:
• выполнение продолжается немедленно
• зависимость не обеспечивается
• исключения выходят за пределы логического стека вызовов
Что может произойти с приложением
⚠️ Забытый await может привести к классическому состоянию гонки: код продолжает выполнение до завершения критической операции, например, проверки прав доступа, открывая окно для эксплуатации.
Атакующий может успеть получить доступ к данным между моментом начала проверки и её завершением.
⚠️ Когда исключения выходят за пределы логического стека вызовов, они могут быть проглочены без логирования. Это маскирует неудачные попытки аутентификации, SQL-инъекции или другие атаки.
⚠️ Истощение пула потоков как вектор DoS-атаки. При высокой нагрузке неправильное использование async/await приводит к истощению пула потоков. Злоумышленник может намеренно генерировать запросы, эксплуатирующие блокирующие операции.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#il_люминатор| 2 | 😭 Как не потратить недельный лимит AI-кодинга за три дня?
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
🔘 Поговорим о том:
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.
⬇️ 18 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок
💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.
🔗 Зарегистрироваться на вебинар | 1 664 |
| 3 | 🧩 Union types появились в ASP.NET Core на .NET 11
В C# 15 можно описать тип с несколькими допустимыми вариантами:
public union IntOrString(int, string);
Такой endpoint может вернуть либо число, либо строку:
app.MapGet("/max-unavailable", () => new IntOrString(2));
JSON останется обычным:
2
или:
"25%"
Без $type и дополнительных обёрток.
Главный плюс — компилятор проверяет, что switch обработал все варианты union.
Поддерживается в Minimal APIs, MVC, SignalR, Blazor и OpenAPI.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#async_news | 2 058 |
| 4 | 🔍Тестовое собеседование с Senior C# разработчиком уже завтра
15 сентября (уже завтра!) в 19:00 по МСК приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle C# разработчика.
Как это будет:
📂 Александр Моргунов, старший C# разработчик с опытом 7+ лет в Европейских высоконагруженных сервисах, будет задавать реальные вопросы и задачи разработчику-добровольцу;
📂 Александр будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью;
📂 В конце можно будет задать любой вопрос Александру.
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для C# разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot
Реклама.
О рекламодателе. | 2 096 |
| 5 | С днем программиста, коллеги!
Желаем, чтобы код компилировался с первого раза, баги находились до релиза, а таски «на пять минут» действительно занимали пять минут.
И конечно, пусть в жизни будет больше приятных сюрпризов — один из них мы уже подготовили. Скорее переходите по ссылке, трясите коробку и забирайте свой подарок ко Дню программиста: https://tprg.ru/YtJ2 | 2 297 |
| 6 | 🧠 When и Unless для умных проверок
В FluentValidation условная валидация запускает правила только при нужных условиях. When и Unless экономят циклы и делают валидаторы читаемыми.
• When = «проверить, если условие верно»
• Unless = «проверить, если условие НЕ верно»
Пример:
RuleFor(x => x.ShippingAddress)
.NotEmpty()
.When(x => x.DeliveryMethod == "Express");
RuleFor(x => x.CreditCard)
.NotEmpty()
.Unless(x => x.PaymentMethod == "PayPal");
When проверяет условие перед правилом. Express доставка требует адрес, PayPal не требует карту. Логика в одном месте без if-else в контроллере.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view | 2 332 |
| 7 | 🌸 Вселенная намекает: пора уже начать этот курс
С 14 сентября цены в Proglib Academy вырастут на 20% 👀
Так что если курс давно ждёт своего часа — лучше не откладывать ещё на месяц 😏
📍 Выбрать курс | 2 172 |
| 8 | 📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#garbage_collector | 2 241 |
| 9 | 🌞 Готовим вебинар про AI в разработке и хотим сделать его максимально полезным
Что реально хочется разобрать? Где чаще всего застреваете? Что пробовали, но так и не получилось нормально внедрить?
🤩 Пишите вопросы в комментариях — самые залайканные разберём на вебинаре в первую очередь.
Задавайте всё, что давно хотелось спросить 📍
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта | 2 181 |
| 10 | Команды ждут тебя на треке программирование роботов на МТС True Tech Champ 2026 — всероссийском чемпионате по программированию с двумя треками и призовым фондом 10 250 000 рублей.
Успей зарегистрироваться до 13 сентября.
В треке программирования роботов тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий сначала в онлайн-симуляторе, а затем на офлайн-полигоне в финале 22 октября. Рекомендуемые стеки: Go, Java, Python, C#, C++, JS.
Участие в командах 2-5 человек. Если у тебя нет своей команды, кураторы помогут объединиться с другими участниками на платформе.
Масштабный финал объединит борьбу за призовой фонд 10 250 000 рублей, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия.
Успей зарегистрироваться и пройти квалификацию до 13 сентября.
erid:2VSb5xEgRdt | 2 482 |
| 11 | ✏️ Async/Await в C# — шпаргалка
➡️ Что такое Task
Task — это обещание, что какое-то событие произойдёт в будущем. Не результат, а именно обещание.
Task<T> — то же самое, но с результатом типа T. Когда задача завершится, значение станет доступно.
Задача считается завершённой, когда событие произошло или значение получено. Проверить это можно через IsCompleted или Status.
➡️ Как дождаться результата
Правильно — асинхронно:
• await task — отпускает поток, пока задача не завершится. Поток свободен, приложение не зависает.
• ContinueWith(action) — задача сама вызовет ваш колбэк, когда завершится. Полезно, если нужно выстроить цепочку без await.
Неправильно — синхронно:
• task.Wait() и task.Result блокируют текущий поток до завершения задачи. Это неэффективно, ведь поток простаивает и опасно: риск дедлока в UI и ASP.NET-контекстах.
Единственное исключение: вызывать Wait или Result на уже завершённой задаче безопасно и дёшево — результат уже есть, блокировки не будет.
➡️ Что делает async
async — это флаг для компилятора: «в этом методе может встретиться await, подготовь конечный автомат». Не более того.
async без await внутри — бессмысленный метод. Он выполнится полностью синхронно, а компилятор при этом сгенерирует тяжёлый шаблонный код конечного автомата впустую.
async не запускает код в фоновом потоке. Если нужен фоновый поток — используйте Task.Run.
➡️ Что делает await
await — точка, в которой метод «разрезается» на до и после. Если задача ещё не завершена, управление возвращается вызывающему коду. Когда задача завершится — выполнение продолжится с того же места.
Без await ключевое слово async ничего не делает.
➡️ Частые ошибки
Вызов .Result или .Wait() в UI-потоке — дедлок. UI-поток заблокирован ожиданием, а задача не может завершиться, потому что ей нужен тот же UI-поток.
async void — допустим только для обработчиков событий. В остальных случаях используйте async Task. Исключения из async void невозможно поймать извне.
Забыли await — задача запустится, но никто не дождётся её завершения. Ошибки внутри неё потеряются молча.
async без await — компилятор предупредит, и правильно сделает. Метод синхронный, а обёртка в Task создаёт ложные ожидания у вызывающего кода.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view | 2 695 |
| 12 | 🚀 .NET 11 вышел в Release Candidate 1
8 сентября Microsoft выпустила первый RC .NET 11. У него уже есть Go-Live Support, поэтому сборку можно использовать в production — хотя для критичных систем разумнее дождаться финального релиза.
Что главное:
→ C# 15 стал default для .NET 11 — union types и closed hierarchies больше не preview;
→ runtime получил новые возможности для диагностики и оптимизации, включая crash reporting на Unix и аппаратное ускорение System.Half;
→ обновились SDK, MSBuild, NuGet, ASP.NET Core, MAUI и WinForms.
🌞 Финальный .NET 11 запланирован на 10 ноября и будет STS-релизом.
А 10 ноября заканчивается поддержка .NET 8 и .NET 9. Для них уже вышли сентябрьские security updates: 8.0.31, 9.0.20 и 10.0.12.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#async_news | 3 028 |
| 13 | 💥 Куда исчезает метод после JIT-компиляции?
В C# мы пишем:
int Double(int x) => x * 2;
var result = Double(21);
Но JIT может решить, что отдельный вызов здесь вообще не нужен.
При inlining тело метода встраивается непосредственно в вызывающий код:
🔴 До:
call Double
↓
x * 2
🔴 После:
21 * 2
Зачем? Меньше накладных расходов на вызов метода, а главное — JIT получает больше кода для последующих оптимизаций. Но inline не означает «метод маленький → обязательно встроить».
JIT учитывает размер метода, частоту вызовов, доступность кода для анализа и другие эвристики. Поэтому даже небольшой метод может не попасть в inline.
📍 А атрибут:
[MethodImpl(MethodImplOptions.AggressiveInlining)]
— это подсказка JIT, а не приказ.
И наоборот, иногда большой метод всё-таки может быть встроен, если JIT считает это выгодным.
Вот почему производительность C# нельзя оценивать только по исходному коду: между C# и CPU есть ещё один слой — JIT и его оптимизатор.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#il_люминатор | 2 938 |
| 14 | 🧪 MSTest 4.4 теперь поддерживает Native AOT
Тесты тоже должны проверять то, что мы отправляем в production. Native AOT означает trimming, ограничения reflection и отсутствие runtime code generation. Обычный managed-тест может этого не показать.
В MSTest 4.4 появился source generation для тестов — test discovery и запуск можно выполнять без зависимости от runtime reflection.
<PublishAot>true</PublishAot>
В итоге можно прогнать тесты в тех же AOT-условиях, в которых будет работать приложение.
Особенно полезно для проектов, где Native AOT — часть production-сборки.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#async_news | 3 354 |
| 15 | 💡 FrozenDictionary. Когда словарь больше не должен меняться
Если коллекция после создания больше не изменяется, обычный Dictionary<TKey, TValue> не всегда лучший вариант.
В .NET 8 появились FrozenDictionary и FrozenSet — специализированные неизменяемые коллекции для сценариев, где данные сначала собираются, а потом много раз читаются.
var users = new Dictionary<int, string>
{
[1] = "Ada",
[2] = "Linus",
[3] = "Grace"
};
var frozenUsers = users.ToFrozenDictionary();
После создания frozenUsers нельзя изменить. Зато структура оптимизируется именно под быстрый поиск.
🟡 Хороший сценарий — конфигурация, справочники, таблицы маршрутизации или наборы разрешений, которые загружаются один раз и затем используются тысячи раз.
FrozenDictionary не означает «быстрее любого Dictionary». Создание такой коллекции дороже, поэтому выигрыш появляется именно там, где чтений много, а изменений нет.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view | 3 420 |
| 16 | 👨💻 string в C# — не просто текст
string — это ссылочный тип с особой поддержкой рантайма. Внутри он хранит непрерывный блок UTF-16 кодовых единиц.
Отсюда первый сюрприз:
string s = "😊";
Console.WriteLine(s.Length); // 2, не 1
Length считает не символы, а UTF-16 кодовые единицы. Эмодзи и многие Unicode-символы занимают две единицы — суррогатную пару.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view | 4 142 |
| 17 | ⚙️ nameof теперь понимает несвязанные обобщения
Удобство и гибкость метапрограммирования — теперь nameof работает для обобщений без аргументов.
Благодаря новой поддержке можно получить имена обобщенных типов без указания параметров:
Console.WriteLine(nameof(List<>)); // Выведет "List"
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view | 4 144 |
| 18 | 🗂 Работа и пет-проекты с одного ПК
Работаете днём в корпоративном репо, вечером в личном на GitHub. Один ПК, но email и ключи подписи разные. Ручная смена настроек Git каждый раз бесит и приводит к косякам с коммитами.
Условные includeIf решают всё
Добавьте в ~/.gitconfig пару строк. Git сам подхватит нужный конфиг по пути к папке или remote URL.
Для рабочих папок загрузит корпоративный email:
[includeIf "gitdir:~/work/"] path = .gitconfig-corp
Личные репозитории получат ваш домашний email автоматически:
[includeIf "hasconfig:remote.*.url:https://github.com/вашеимя/**"] path = .gitconfig-personal
Забудьте про git config --global user.email каждый раз.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view | 4 150 |
| 19 | 💥 Azure Functions: Linux Consumption уходит, на смену приходит Flex
Microsoft постепенно закрывает старый Linux Consumption Plan для Azure Functions. Его поддержка завершится 30 сентября 2028 года, а новые функции и версии языков для него уже не развиваются. Для новых serverless-приложений Microsoft рекомендует Flex Consumption.
🔘 Что меняется для .NET-разработчиков:
— Flex работает с .NET 8, 9 и 10 в isolated-модели;
— функции масштабируются независимо друг от друга;
— можно настраивать память инстанса;
— появилась интеграция с VNet;
— есть Always Ready-инстансы для снижения cold start;
— деплой идёт через blob storage, а не старый zip-deploy.
📍 Переключить существующий Linux Consumption App на Flex «на месте» нельзя. Нужно создать новое Function App в Flex, перенести конфигурацию и задеплоить код.
Для миграции Microsoft уже предлагает отдельный CLI:
az functionapp flex-migration start
Он создаёт Flex-приложение на основе существующего Linux Consumption App.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#async_news | 4 138 |
| 20 | ⚡️ C# 15 убирает флаг из вложенных циклов
Раньше для выхода сразу из нескольких foreach часто приходилось заводить переменную:
bool found = false;
foreach (var warehouse in warehouses)
{
foreach (var bin in warehouse.Bins)
{
if (bin.Sku == requestedSku)
{
found = true;
break;
}
}
if (found)
break;
}
🤩 В C# 15 можно обозначить внешний цикл и выйти из него напрямую:
scan: foreach (var warehouse in warehouses)
{
foreach (var bin in warehouse.Bins)
{
if (bin.Sku == requestedSku)
break scan;
}
}
Никаких found, дополнительного if и лишнего состояния.
C# 15 сейчас доступен в .NET 11 Preview 7.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#sharp_view | 4 451 |
