C# 1001 notes
6.59K subscribers
371 photos
10 videos
2 files
330 links
Регулярные короткие заметки по C# и .NET.

Просто о сложном для каждого.

admin - @haarrp
Download Telegram
🖥 Directory.Build.props - простой способ задать единые настройки для всей .NET-солюции.

Вместо того чтобы дублировать конфигурацию в каждом .csproj, ты создаёшь один файл в корне и управляешь всем централизованно: версия языка, уровни предупреждений, Nullable, ImplicitUsings, Deterministic-сборки и даже версии NuGet-пакетов.

Подходит, если хочешь порядок в проектах и одинаковые правила для всей команды.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Полезное о блокировках в C#. Многие собеседования заваливаются именно здесь.

Коротко по сути:

lock не работает в `async`-методах.
Причина проста — выполнение может продолжиться на другом потоке, и гарантии взаимного исключения теряются.

Что использовать вместо `lock` в асинхронном коде:

- SemaphoreSlim — основной вариант
- Semaphore
- Mutex
- Monitor (в синхронных сценариях)

Правильный шаблон:

1. Всегда используйте таймаут, чтобы избежать зависаний.
2. Освобождайте ресурс в `finally`, иначе возможна утечка блокировки.

Примерный подход:

- попытаться войти с ограничением времени
- выполнить критическую секцию
- гарантированно освободить семафор

Почему это важно:
В многопоточном и распределённом окружении неправильная синхронизация приводит к гонкам, дублированию запросов, «штормам» в кеше и нагрузке на внешний API.

Вопрос для практики:
Как реализовать блокировку на уровне базы данных, чтобы синхронизировать несколько инстансов приложения?

Ответ — в разборе по distributed locking:
milanjovanovic.tech/blog/distributed-locking-in-dotnet-coordinating-work-across-multiple-instances
✔️ Delegating Handlers в .NET: как правильно добавлять сквозную логику для HttpClient

DelegatingHandler - это удобный способ внедрять сквозную логику в каждый HTTP-запрос: авторизацию, логирование, метрики, ретраи и любые другие политики, не трогая основной код.

Пример обработчика аутентификации:

- добавляет заголовок Authorization
- подставляет корректный User-Agent
- затем передаёт управление следующему звену конвейера

Это позволяет централизованно контролировать конфигурацию запросов и избегать дублирования логики во всех сервисах.

Подходит для чистой архитектуры, микросервисов и SDK, где важна единообразная обработка запросов.
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 .NET 10 - реально мощный релиз. Вот что важно знать 👇

.NET 10 и C# 14 вышли 11 ноября 2025 года.
Это LTS-версия - поддержку будут выпускать до ноября 2028 года,
поэтому её можно спокойно брать для продакшна.

🔥 Главное

C# 14
Новый синтаксис и возможности языка:
• Extension Members — расширения прямо в типах
• Null-Conditional Assignment - безопасные присваивания
field keyword — точный контроль над авто-свойствами
• Модификаторы у параметров лямбд
• Частичные конструкторы и события

File-Based Apps

Теперь можно просто создать один .cs файл и запускать приложение -
без .sln, без .csproj. Быстро, просто, удобно.

ASP.NET Core
• Валидация в Minimal APIs
• JSON Patch
• SSE (Server-Sent Events)
• Поддержка OpenAPI 3.1

EF Core
• Complex Types можно делать optional
• JSON и struct внутри Complex Types
• LeftJoin / RightJoin
• Named Query Filters
• ExecuteUpdate работает с JSON-колонками
• В ExecuteUpdate теперь можно использовать обычные лямбды


Полный гайд здесь:
https://antondevtips.com/blog/new-features-in-dotnet-10-and-csharp-14/?utm_source=twitter&utm_medium=social&utm_campaign=04-12-2025