C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
Показати більше📈 Аналітичний огляд Telegram-каналу C# (C Sharp) programming
Канал C# (C Sharp) programming (@csharp_ci) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 18 030 підписників, посідаючи 7 242 місце в категорії Технології та додатки та 36 510 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 18 030 підписників.
За останніми даними від 29 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -54, а за останні 24 години на -9, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 15.19%. Протягом перших 24 годин після публікації контент зазвичай збирає 8.07% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 2 738 переглядів. Протягом першої доби публікація в середньому набирає 1 455 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 0.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, api, логика, архитектура, string.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
Завдяки високій частоті оновлень (останні дані отримано 30 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var tasks = new List<Task>();
for (int i = 0; i < 5; i++)
{
tasks.Add(Task.Run(() => Console.WriteLine($"Значение i = {i}")));
}
await Task.WhenAll(tasks);
}
}
Вопросы:
Что выведет эта программа при запуске и почему?
Как минимально изменить код (не затрагивая содержимое Task.Run), чтобы на консоль выводились числа от 0 до 4 (по одному разу каждое)?
Подсказка: лямбда внутри Task.Run замыкает переменную i, а не её текущее значение.
@csharp_cigenerics
• C# 3.0 — революция LINQ, lambda`-выражения, автоматические свойства, `var
• C# 4.0 — dynamic, улучшения COM и переговорчивость аннотации
• C# 5.0 — async/await — асинхронность для всех
• C# 6.0 — улучшения синтаксиса: string interpolation, expression-bodied members, null-условные выражения
• C# 7.x — tuples, pattern matching, ref locals, out variables
• C# 8.0 — nullable reference types, ranges/indices, асинхронные потоки
• C# 9.0 — record, init-only properties, top-level statements
• C# 10 — глобальные using, file-scoped namespace, улучшенные структуры
• C# 11 — raw string literals, generic math, pattern matching improvements
• C# 12 и далее — ожидаются расширенные метапрограммирование, списочные выражения, улучшения в безопасность и производительности
🔧 Почему это важно:
• Язык постоянно развивается, становясь выразительнее, безопаснее и удобнее
• Новые версии дают мощные инструменты — для асинхронного программирования, функционального стиля и более чистого кода
• Понимание изменений помогает быстрее адаптироваться к трендам и выбирать актуальный инструментальный стек
💡 Если вы разрабатываете на C#, стоит ознакомиться с историей версий — и понять, какие фичи уже доступны, а что стоит ожидать в будущем.
👉 Подробнее
@csharp_ci
#dotnet #csharp #programming #developer #language #whatsnew #technologyBackgroundService и PeriodicTimer. Ни Hangfire, ни Quartz не нужны, если всё просто.
🧱 Основные шаги:
1. ✅ Включаем конкурентный запуск/остановку сервисов:
builder.Services.Configure<HostOptions>(o =>
{
o.ServicesStartConcurrently = true;
o.ServicesStopConcurrently = true;
});
2. 🌀 Реализуем фоновую задачу:
public class PeriodicBackgroundTask : BackgroundService
{
private readonly TimeSpan _period = TimeSpan.FromSeconds(5);
private readonly ILogger<PeriodicBackgroundTask> _logger;
public PeriodicBackgroundTask(ILogger<PeriodicBackgroundTask> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
using PeriodicTimer timer = new PeriodicTimer(_period);
while (!stoppingToken.IsCancellationRequested &&
await timer.WaitForNextTickAsync(stoppingToken))
{
_logger.LogInformation("Executing PeriodicBackgroundTask");
}
}
}
📌 Особенности:
- BackgroundService — стандартный способ запускать фоновые задачи в ASP.NET Core
- PeriodicTimer — простой способ повторять с задержкой
- Встроенный контроль остановки через CancellationToken
💡 Подходит для:
• Регулярных проверок
• Очистки кэша
• Периодических sync-задач
#aspnetcore #dotnet #backgroundjobs #csharp #devOpenTelemetry.Extensions.Hosting OpenTelemetry.Instrumentation.AspNetCore OpenTelemetry.Instrumentation.Http OpenTelemetry.Exporter.OpenTelemetryProtocol- В
Program.cs:
builder.Services.AddOpenTelemetry()
.ConfigureResource(r => r.AddService("MyService"))
.WithTracing(t => t
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter()
);
builder.Logging.AddOpenTelemetry(lo => lo.AddOtlpExporter());
- Настраиваем экспорт через OTLP в Grafana Cloud — задаём endpoint и токен
📊 Что получаем:
- Полный стек наблюдаемости: метрики, логи, трассировки в одном интерфейсе
- Графаны Dashboard — красивые дашборды + оповещения при проблемах
- Глубокий анализ: сквозные запросы, задержки, узкие места
🎯 Почему это стоит использовать:
- Вендорно-нейтральное решение — работает с разными платформами
- Начальный уровень бесплатно в Grafana Cloud
- Настройка занимает минимум времени — максимальная отдача
@csharp_ci
// Проверка: Ticketing-модуль не должен зависеть от Users, Events и т.д.
Types.InAssemblies(ticketingAssemblies)
.That().DoNotHaveDependencyOnAny(otherModules)
.Should().NotHaveDependencyOnAny(otherModules)
.GetResult()
.ShouldBeSuccessful();
// Проверка Clean Architecture:
Types.InAssembly(DomainAssembly)
.Should().NotHaveDependencyOn(ApplicationAssembly.GetName().Name)
.GetResult()
.ShouldBeSuccessful();
✅ Можно проверять любой дизайн:
• Модули — должны вызывать друг друга только через public API
• Слои Clean Architecture — например, Domain не должен ссылаться на Infrastructure
• Правила дизайна — все IDomainEvent должны быть sealed
• Конвенции имен — например, все CommandHandler'ы должны оканчиваться на CommandHandler
🛠 Итого:
• Architecture tests — не просто инструмент, а средство контроля архитектуры
• Работает как компилятор для архитектурных правил — это гарантирует соблюдение структуры
• Идеально подходит для modular monolith, Clean Architecture и крупных систем
• Сдвигает баги из продакшна в CI-пайплайн
🧭 Как начать:
1. Выберите библиотеку (ArchUnitNET, NetArchTest, …)
2. Напишите пару тестов — например, на зависимости между слоями
3. Интегрируйте в CI (GitHub Actions, Azure Pipelines, TeamCity и др.)
4. Соблюдайте — и архитектура останется в целости
🎯 Ключевой вывод
С architecture testing вы не просто «следуете стандартам» — вы автоматизируете дизайн, позволяя команде фокусироваться на логике, а не на структуре. Shift Left не для QA — теперь и архитектура под защитой.
📚 Подробнее