C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
Показати більше📈 Аналітичний огляд Telegram-каналу C# (C Sharp) programming
Канал C# (C Sharp) programming (@csharp_ci) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 18 126 підписників, посідаючи 7 044 місце в категорії Технології та додатки та 36 287 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 18 126 підписників.
За останніми даними від 30 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -65, а за останні 24 години на 0, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 15.36%. Протягом перших 24 годин після публікації контент зазвичай збирає 7.44% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 2 784 переглядів. Протягом першої доби публікація в середньому набирає 1 349 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 0.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, api, логика, архитектура, string.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
Завдяки високій частоті оновлень (останні дані отримано 31 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
dotnet new или вручную подключить NuGet-пакеты.
🤖 GitHub
@csharp_ci[IsExternalInit] для init-only свойств, PolySharp создаст его за кулисами. При этом он не трогает фичи, требующие поддержки рантайма, но покрывает огромный пласт синтаксических улучшений — от nullable-аннотаций до интерполированных строковых обработчиков.
🤖 GitHub
@csharp_ciUserService
- UserService сохраняет пользователя и вызывает EmailService
- EmailService отправляет письмо через SmtpClient
Но если присмотреться — SendWelcomeEmail помечен как **async void** ❗️
Почему это проблема?
❌ async void делает невозможным отлов исключений.
Если внутри SendEmailAsync() что-то пойдёт не так — try/catch не сработает.
Исключение пролетит мимо и может тихо крашнуть приложение или вызвать странные баги.
Почему так?
🔸 async void не возвращает Task, значит await невозможен
🔸 Исключения из таких методов не перехватываются обычным образом
✅ Как правильно:
Всегда возвращай Task — только так можно надёжно обрабатывать ошибки.
📌 Запомни правило:
async void допустим только в event‑handler’ах. Больше — нигде.
Ты уже сталкивался с этой ловушкой? Пиши свои фейлы или советы 👇Program.cs и appsettings.json
3. Укажи пути к downstream-сервисам
После этого твой прокси уже готов к работе — будет распределять трафик между сервисами.
Но это только начало. YARP мощный и расширяемый. Он поддерживает разные политики балансировки нагрузки прямо "из коробки":
▪ Random — случайный выбор
▪ RoundRobin — по кругу
▪ LeastRequests — к тому, у кого меньше всего запросов
▪ FirstAlphabetical — по алфавиту
▪ PowerOfTwoChoices — выбери лучший из двух случайных (дефолт)
Автор статьи применил YARP для масштабирования нескольких приложений и делится опытом в полном гайде:
📖 Читай подробнее: https://milanjovanovic.tech/blog/horizontally-scaling-aspnetcore-apis-with-yarp-load-balancing
services.Decorate<IService, LoggingDecorator>();
Зачем это нужно?
— логгировать вызовы без лома архитектуры
— централизованно обрабатывать ошибки
— добавить метрики без влезания в бизнес-логику
📌 Подробнее
class User
{
public string Name { get; set; }
public int Age { get; set; }
}
Нужно написать метод UniqueBy<T, TKey>, который возвращает только уникальные элементы по ключу. Нельзя использовать LINQ (Distinct, GroupBy и т.д.). Метод должен быть ленивым — использовать yield return.
Пример:
var users = new List<User>
{
new User { Name = "Alice", Age = 30 },
new User { Name = "Bob", Age = 25 },
new User { Name = "Alice", Age = 35 },
new User { Name = "Eve", Age = 25 }
};
foreach (var user in UniqueBy(users, u => u.Name))
{
Console.WriteLine($"{user.Name}, {user.Age}");
}
// Вывод:
// Alice, 30
// Bob, 25
// Eve, 25
🧠 Решение:
public static IEnumerable<T> UniqueBy<T, TKey>(IEnumerable<T> source, Func<T, TKey> keySelector)
{
var seen = new HashSet<TKey>();
foreach (var item in source)
{
var key = keySelector(item);
if (seen.Add(key))
yield return item;
}
}
📌 Чем эта задача интересна:
▪ Требует знания HashSet, yield return и замыканий
▪ Работает с любыми коллекциями и даже бесконечными потоками
▪ Часто нужна при фильтрации API-результатов, логов и UI
Ставь лайк, если хочешь больше таких продвинутых C#-задач.Result<T> вместо выбрасывания исключения
— Caller обязан проверить IsSuccess и обработать ошибку
— Код становится предсказуемее и легче тестируется
— Дополнительно: пропускная способность может быть выше, чем при throw/catch
Пример:
Result<User> result = userService.FindById(id);
if (!result.IsSuccess)
return Error(result.Error);
Подробнее