Библиотека шарписта | C#, F#, .NET, ASP.NET
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام Библиотека шарписта | 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 |
