C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
Больше📈 Аналитический обзор Telegram-канала C# (C Sharp) programming
Канал C# (C Sharp) programming (@csharp_ci) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 18 127 подписчиков, занимая 7 041 место в категории Технологии и приложения и 36 302 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 18 127 подписчиков.
Согласно последним данным от 29 августа, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -78, а за последние 24 часа — -7, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 15.03%. В первые 24 часа после публикации контент обычно набирает 7.44% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 2 725 просмотров. В течение первых суток публикация набирает 1 348 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 0.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как .net, api, логика, архитектура, string.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
Благодаря высокой частоте обновлений (последние данные получены 30 августа, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
public async Task<User> GetUserAsync(int id)
{
using var conn = new SqlConnection(_conn);
conn.Open(); // 👈 синхронный блокирующий вызов
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM Users WHERE Id = @id";
cmd.Parameters.AddWithValue("@id", id);
using var reader = cmd.ExecuteReader(); // 👈 тоже блокировка
if (await reader.ReadAsync())
return Map(reader);
return null;
}
Под нагрузкой резко растёт:
- очередь ThreadPool
- количество заблокированных потоков
- p99 latency
Какой вариант исправления правильный?
1. Заменить ExecuteReader на ExecuteReaderAsync, но оставить conn.Open() как есть.
2. Вынести всё выполнение в Task.Run и пусть код работает на отдельных потоках.
3. Переписать весь путь на асинхронный: использовать OpenAsync, ExecuteReaderAsync и полностью убрать sync-over-async.
Как думаешь, какой вариант правильный?IExceptionHandler, который реализует паттерн try- прямо внутри middleware.
### Как это работает?
✅ Ты сам указываешь, какие типы исключений хочешь перехватывать
✅ Если ты обработал ошибку — возвращаешь true, и цепочка остановится
✅ Можно выстроить несколько обработчиков подряд — они вызовутся по очереди, пока один не справится
📦 Это больше не про громоздкие try-catch или тонны if — теперь всё централизовано и масштабируемо.
🔧 Идеально для:
- Глобальной обработки ошибок
- Разделения логики по типам исключений
- Подключения к логгерам, метрикам, retry-логике
📚 Пример кода и объяснение:
Подходит всем, кто пишет на ASP.NET Core или строит APIЭ
#dotnet #aspnetcore #обработкаошибок #middleware #backend #csharp[Timestamp]. EF автоматически будет обновлять версию записи и проверять конфликт изменений.
🟦 Вариант 2 - через Fluent API
Если не хотите засорять модель атрибутами, то же самое можно описать в OnModelCreating с помощью .IsRowVersion().
🧩 Пример из картинки показывает оба подхода — выберите тот, что лучше вписывается в вашу архитектуру.
public class Fetcher
{
private readonly HttpClient _client = new HttpClient();
public async Task<string> DownloadAsync(string url)
{
await Task.Delay(10);
return await _client.GetStringAsync(url);
}
}
public async Task RunAsync()
{
var fetcher = new Fetcher();
var tasks = Enumerable.Range(0, 5)
.Select(_ => fetcher.DownloadAsync("https://example.com"))
.ToList();
await Task.WhenAll(tasks);
Console.WriteLine("Done");
}
Вопросы:
1) Код может «подвиснуть» или упасть в продакшене.
Какие два скрытых дефекта здесь спрятаны?
2) Как их исправить без изменения сигнатур методов?
3) Почему HttpClient здесь одновременно правильно и неправильно?
4) Что произойдет, если:
заменить HttpClient на HttpClientFactory;
- убрать Task.Delay(10)?
5) Как переписать класс так, чтобы он был:
- потокобезопасным
- быстрым
- без скрытных deadlock-сценариев
- и выдерживал сотни запросов в секунду?
Требования:
- нельзя менять логику RunAsync
- нельзя кэшировать результат
- код должен оставаться асинхронным